ДОСТУПНО ТОЛЬКО ПРИ ИСПОЛЬЗОВАНИИ Qt 5.
Для установки объекта в контекст JavaScript сборка jCjS должна содержать модуль QtWebSockets.
В сборке с Qt 4 конструктор JCJSWebSocketServer отсутствует.
Объект JCJSWebSocketServer — асинхронный сервер стандартного протокола WebSocket. Поддерживаются открытый режим ws и защищённый режим wss. Объект доступен в контексте JavaScript при сборке jCjS с Qt 5 и модулем QtWebSockets.
Текстовое сообщение поступает в JavaScript как String, бинарное — как ByteArray. Значение socketDescriptor в сигналах и методах является идентификатором WebSocket-клиента и действительно только в течение его текущего соединения.
ВНИМАНИЕ!!! JCJSWebSocketServer не декодирует внутренний кадр протокола обмена jCjS. При использовании JCJSWebSocketClient для прямого соединения с этим сервером установите клиенту raw = true.
String webServer.listen_addr чтение/запись
Адрес интерфейса прослушивания, например 127.0.0.1, 0.0.0.0 или ::.
int webServer.listen_port чтение/запись
Порт прослушивания, 0–65535.
String Array() webServer.allAddresses только чтение
Список локальных IP-адресов.
bool webServer.isWork только чтение
Сервер запущен и принимает соединения.
VariantList webServer.clientDescriptors только чтение
Идентификаторы подключённых клиентов.
VariantList webServer.clientAddrs только чтение
Адреса подключённых клиентов.
int webServer.clientCount только чтение
Количество подключённых клиентов.
int webServer.maxPendingConnections чтение/запись
Максимальное количество ожидающих соединений.
int webServer.handshakeTimeout чтение/запись
Таймаут WebSocket handshake. Свойство доступно начиная с Qt 5.14.
quint32 webServer.maxFrameSize чтение/запись
Максимальный размер входного WebSocket-сообщения для каждого клиента.
По умолчанию 67108864 (64 МБ), допустимый максимум 268435456 (256 МБ).
Новое значение применяется и к уже подключённым клиентам.
bool webServer.ssl чтение/запись
Запустить сервер в защищённом режиме wss.
String webServer.mode только чтение
Текущий режим сервера: SSL либо без шифрования.
String webServer.sslProto только чтение
Протокол установленного TLS-сеанса либо UnknownProtocol.
String webServer.sslDir чтение/запись
Каталог с сертификатом и приватным ключом.
String webServer.sslCrtName чтение/запись
Общее имя файлов сертификата и ключа. Файлы с расширениями .crt и .key должны иметь одинаковое имя.
String webServer.sslKeyPass чтение/запись
Пароль приватного ключа.
bool webServer.ignoreSelfSignSsl чтение/запись
Разрешить игнорирование поддерживаемых ошибок самоподписанного сертификата у подключённого клиента.
Number webServer.inCount, outCount, inCountBytes, outCountBytes только чтение
Счётчики принятых/переданных сообщений и байтов.
void webServer.started()
Сервер успешно начал прослушивание.
void webServer.connected(Number socketDescriptor)
Подключился новый клиент.
void webServer.disconnected(Number socketDescriptor)
Клиент отключился.
void webServer.readyRead(Variant message, Number socketDescriptor)
От клиента принято полное текстовое или бинарное WebSocket-сообщение.
void webServer.error(Number socketDescriptor, String errorText)
Ошибка клиентского соединения.
void webServer.serverError(String errorText)
Ошибка WebSocket-сервера или код закрытия протокола.
void webServer.aboutToClose(Number socketDescriptor)
Клиентское соединение готовится к закрытию.
void webServer.readChannelFinished(Number socketDescriptor)
Канал чтения клиента закрыт.
void webServer.aTcp(int port), void webServer.rTcp(int port)
Служебные сигналы добавления и освобождения TCP-порта.
bool webServer.serverStart()
Создать сервер и начать прослушивание.
bool webServer.serverStop()
Закрыть клиентские соединения и остановить сервер.
bool webServer.serverStartStop()
Переключить состояние сервера.
bool webServer.isListening()
Проверить, выполняется ли прослушивание.
void webServer.sendAllClients(Variant message)
Отправить сообщение всем клиентам.
qint64 webServer.sendClient(Variant message, Number socketDescriptor)
Отправить сообщение указанному клиенту; возвращает число байтов либо 0.
bool webServer.removeClient(Number socketDescriptor)
Закрыть соединение с указанным клиентом.
void webServer.removeAllCliens()
Закрыть все клиентские соединения. Имя метода сохранено для совместимости.
String webServer.getPeerAddress(Number socketDescriptor)
Получить IP-адрес клиента.
String webServer.getSslProto(Number socketDescriptor)
Получить протокол TLS клиентского соединения.
WebSocket echo-сервер:
post.loadPlugin('PluginNetwork').install(scriptEngine);
var webServer = new JCJSWebSocketServer();
webServer.listen_addr = '0.0.0.0';
webServer.listen_port = 8080;
webServer.maxFrameSize = 64 * 1024 * 1024;
webServer.started.connect(function() {
post.log('i', 'WebSocket сервер запущен');
});
webServer.connected.connect(function(socketDescriptor) {
post.log('i', 'Клиент: ' + webServer.getPeerAddress(socketDescriptor));
});
webServer.readyRead.connect(function(message, socketDescriptor) {
webServer.sendClient(message, socketDescriptor);
});
webServer.disconnected.connect(function(socketDescriptor) {
post.log('i', 'Клиент отключён: ' + socketDescriptor);
});
webServer.serverError.connect(function(text) {
post.log('e', 'WebSocket сервер: ' + text);
});
if (!webServer.serverStart())
post.log('e', 'Не удалось запустить WebSocket сервер');
Защищённый сервер wss:
var secureServer = new JCJSWebSocketServer(); secureServer.listen_addr = '0.0.0.0'; secureServer.listen_port = 8443; secureServer.ssl = true; secureServer.sslDir = 'cert'; secureServer.sslCrtName = 'server'; // cert/server.crt и cert/server.key secureServer.sslKeyPass = 'private-key-password'; secureServer.serverStart();
Рассылка и отключение клиента:
webServer.sendAllClients('Сервер будет перезапущен');
var clients = webServer.clientDescriptors;
if (clients.length > 0)
webServer.removeClient(clients[0]);