Класс QWebSocketServer
Реализует сервер на основе WebSocket. Подробнее...
| Заголовок: | #include <QWebSocketServer> |
| CMake: | find_package(Qt6 COMPONENTS WebSockets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::WebSockets) |
| qmake: | QT += websockets |
| С версии: | Qt 5.3 |
| Наследует: | QObject |
Типы
| Перечисление | SslMode { SecureMode, NonSecureMode } |
Открытые функции
| QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr) | |
| виртуальный | ~QWebSocketServer() override |
| void | close() |
| QWebSocketProtocol::CloseCode | error() const |
| QString | errorString() const |
| void | handleConnection(QTcpSocket *socket) const |
| std::chrono::milliseconds | handshakeTimeout() const |
| int | handshakeTimeoutMS() const |
| bool | hasPendingConnections() const |
| bool | isListening() const |
| bool | listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
| int | maxPendingConnections() const |
| виртуальный QWebSocket * | nextPendingConnection() |
| void | pauseAccepting() |
| QNetworkProxy | proxy() const |
| void | resumeAccepting() |
| QWebSocketServer::SslMode | secureMode() const |
| QHostAddress | serverAddress() const |
| QString | serverName() const |
| quint16 | serverPort() const |
| QUrl | serverUrl() const |
| void | setHandshakeTimeout(std::chrono::milliseconds msec) |
| void | setHandshakeTimeout(int msec) |
| void | setMaxPendingConnections(int numConnections) |
| void | setProxy(const QNetworkProxy &networkProxy) |
| void | setServerName(const QString &serverName) |
| bool | setSocketDescriptor(qintptr socketDescriptor) |
| void | setSslConfiguration(const QSslConfiguration &sslConfiguration) |
| qintptr | socketDescriptor() const |
| QSslConfiguration | sslConfiguration() const |
| QList<QWebSocketProtocol::Version> | supportedVersions() const |
Сигналы
| void | acceptError(QAbstractSocket::SocketError socketError) |
| void | alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
| void | closed() |
| void | handshakeInterruptedOnError(const QSslError &error) |
| void | newConnection() |
| void | originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator) |
| void | peerVerifyError(const QSslError &error) |
| void | preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator) |
| void | serverError(QWebSocketProtocol::CloseCode closeCode) |
| void | sslErrors(const QList<QSslError> &errors) |
Подробное описание
Он моделируется по QTcpServer и ведет себя так же. Поэтому, если вы знаете, как использовать QTcpServer, вы знаете, как использовать QWebSocketServer. Этот класс позволяет принимать входящие соединения WebSocket. Вы можете указать порт или позволить QWebSocketServer выбрать его автоматически. Вы можете прослушивать определенный адрес или все адреса машины. Вызовите listen(), чтобы сервер прослушивал входящие соединения.
Затем сигнал newConnection() генерируется каждый раз, когда клиент подключается к серверу. Вызовите nextPendingConnection(), чтобы принять ожидающее соединение как подключенное QWebSocket. Функция возвращает указатель на QWebSocket в состоянии QAbstractSocket::ConnectedState, который вы можете использовать для общения с клиентом.
Если произошла ошибка, serverError() возвращает тип ошибки, а errorString() можно вызвать, чтобы получить удобочитаемое описание того, что произошло.
При прослушивании соединений адрес и порт, на которых прослушивается сервер, доступны как serverAddress() и serverPort().
Вызов close() заставляет QWebSocketServer прекратить прослушивание входящих подключений.
QWebSocketServer в настоящее время не поддерживает расширения WebSocket и подпротоколы WebSocket.
Примечание: При работе с самоподписанными сертификатами, ошибка Firefox bug 594502 препятствует подключению Firefox к защищенному серверу WebSocket. Чтобы обойти эту проблему, сначала перейдите к защищенному серверу WebSocket с помощью HTTPS. FireFox укажет, что сертификат недействителен. После этого сертификат можно добавить в исключения. После этого подключение к защищенному WebSocket должно работать.
QWebSocketServer поддерживает только версию 13 протокола WebSocket, как указано в RFC 6455.
Существует стандартный таймаут рукопожатия соединения в 10 секунд, чтобы избежать отказа в обслуживании, который можно настроить с помощью setHandshakeTimeout().
См. также Пример сервера WebSocket и QWebSocket.
Документация по типам членов
перечисление QWebSocketServer::SslMode
Указывает, работает ли сервер по wss (SecureMode) или ws (NonSecureMode)
| Константа | Значение | Описание |
|---|---|---|
QWebSocketServer::SecureMode |
0 |
Сервер работает в защищенном режиме (по wss) |
QWebSocketServer::NonSecureMode |
1 |
Сервер работает в незащищенном режиме (по ws) |
Документация по функциям-членам
QWebSocketServer::QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr)
Создает новый QWebSocketServer с заданным serverName. serverName будет использоваться на стадии рукопожатия HTTP для идентификации сервера. Он может быть пустым, в этом случае имя сервера не будет отправлено клиенту. Параметр secureMode указывает, работает ли сервер по wss (SecureMode) или по ws (NonSecureMode).
parent передается в конструктор QObject.
[signal] void QWebSocketServer::acceptError(QAbstractSocket::SocketError socketError)
Этот сигнал генерируется, когда принятие нового подключения приводит к ошибке. Параметр socketError описывает тип произошедшей ошибки.
См. также pauseAccepting() и resumeAccepting().
[signal, since 6.2] void QWebSocketServer::alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QWebSocketServer генерирует этот сигнал, если от узла-партнера было получено сообщение об ошибке. level указывает, была ли ошибка критической или предупреждением. type — код, объясняющий, почему было отправлено предупреждение. Если доступно текстовое описание сообщения об ошибке, оно предоставляется в description.
Примечание: Сигнал предназначен в основном для информационных и отладочных целей и не требует обработки в приложении. Если предупреждение было критическим, базовая система обработает его и закроет соединение.
Примечание: Не все бэкэнды поддерживают эту функциональность.
Эта функция была добавлена в Qt 6.2.
См. также alertSent(), QSsl::AlertLevel и QSsl::AlertType.
[signal, since 6.2] void QWebSocketServer::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QWebSocketServer генерирует этот сигнал, если сообщение об ошибке было отправлено узлу-партнеру. level указывает, было ли это предупреждение или критическая ошибка. type содержит код сообщения об ошибке. Если доступно текстовое описание сообщения об ошибке, оно предоставляется в description.
Примечание: Этот сигнал в основном информативный и может использоваться для отладки, обычно не требует никаких действий от приложения.
Примечание: Не все бэкэнды поддерживают эту функциональность.
Эта функция была добавлена в Qt 6.2.
См. также alertReceived(), QSsl::AlertLevel и QSsl::AlertType.
[signal] void QWebSocketServer::closed()
Этот сигнал генерируется, когда сервер закрывает соединение.
См. также close().
[signal, since 6.2] void QWebSocketServer::handshakeInterruptedOnError(const QSslError &error)
QWebSocketServer генерирует этот сигнал, если при проверке сертификата обнаружена ошибка error, и если в QSslConfiguration включена ранняя обработка ошибок.
Эта функция была добавлена в Qt 6.2.
См. также sslErrors() и QSslConfiguration::setHandshakeMustInterruptOnError().
[signal] void QWebSocketServer::newConnection()
Этот сигнал генерируется каждый раз, когда становится доступно новое подключение.
См. также hasPendingConnections() и nextPendingConnection().
[signal] void QWebSocketServer::originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)
Этот сигнал генерируется при запросе нового подключения. Слот, подключенный к этому сигналу, должен указывать, разрешен ли источник (который можно определить с помощью вызова origin()) в объекте authenticator (выполняя setAllowed()).
Если ни один слот не подключен к этому сигналу, все источники будут приниматься по умолчанию.
Примечание: Использовать QueuedConnection для подключения к этому сигналу невозможно, так как подключение всегда будет успешным.
[signal] void QWebSocketServer::peerVerifyError(const QSslError &error)
QWebSocketServer может генерировать этот сигнал несколько раз во время рукопожатия SSL, прежде чем будет установлено шифрование, чтобы указать, что произошла ошибка во время установления идентичности узла-партнера. Ошибка error обычно указывает, что QWebSocketServer не может безопасно идентифицировать узла-партнера.
Этот сигнал предоставляет вам раннее предупреждение о проблемах. Подключив слот к этому сигналу, вы можете вручную разорвать подключение из соединенного слота, прежде чем рукопожатие будет завершено. Если никаких действий не будет предпринято, QWebSocketServer продолжит генерировать QWebSocketServer::sslErrors().
См. также sslErrors().
[signal, since 5.8] void QWebSocketServer::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QWebSocketServer генерирует этот сигнал при согласовании криптографического набора PSK, и поэтому требуется аутентификация PSK.
При использовании PSK клиент должен отправить серверу допустимую идентификацию и допустимый предварительно согласованный ключ, чтобы рукопожатие SSL продолжилось. Приложения могут предоставить эту информацию в слоте, подключенном к этому сигналу, заполнив переданный объект authenticator в соответствии со своими потребностями.
Примечание: Игнорирование этого сигнала или невозможность предоставить необходимые учетные данные приведет к сбою рукопожатия, а следовательно, к прерыванию соединения.
Примечание: Объект authenticator принадлежит сокету и не должен удаляться приложением.
Эта функция была добавлена в Qt 5.8.
См. также QSslPreSharedKeyAuthenticator и QSslSocket::preSharedKeyAuthenticationRequired().
[signal] void QWebSocketServer::serverError(QWebSocketProtocol::CloseCode closeCode)
Этот сигнал генерируется, когда во время настройки подключения WebSocket возникает ошибка. Параметр closeCode описывает тип произошедшей ошибки.
См. также errorString().
[signal] void QWebSocketServer::sslErrors(const QList<QSslError> &errors)
QWebSocketServer излучает этот сигнал после рукопожатия SSL, чтобы указать, что произошла одна или несколько ошибок во время установления идентичности peer. Ошибки обычно указывают на то, что QWebSocketServer не может безопасно идентифицировать peer. Если не принять никаких мер, соединение будет разорвано после излучения этого сигнала.
errors содержит одну или несколько ошибок, которые препятствуют QSslSocket в проверке идентичности peer.
См. также peerVerifyError().
[override virtual] QWebSocketServer::~QWebSocketServer()
Уничтожает объект QWebSocketServer. Если сервер прослушивает подключения, сокет автоматически закрывается. Любые клиенты QWebSocket, которые всё ещё находятся в очереди, закрываются и удаляются.
См. также close().
void QWebSocketServer::close()
Закрывает сервер. Сервер больше не будет прослушивать входящие подключения.
QWebSocketProtocol::CloseCode QWebSocketServer::error() const
Возвращает код ошибки для последней произошедшей ошибки. Если ошибка не произошла, возвращается QWebSocketProtocol::CloseCodeNormal.
См. также errorString().
QString QWebSocketServer::errorString() const
Возвращает удобочитаемое описание последней произошедшей ошибки. Если ошибка не произошла, возвращается пустая строка.
См. также serverError().
[since 5.9] void QWebSocketServer::handleConnection(QTcpSocket *socket) const
Обновляет tcp-сокет до веб-сокета.
Объект QWebSocketServer примет владение объектом сокета и удалит его при необходимости.
Эта функция была добавлена в Qt 5.9.
[since 5.14] std::chrono::milliseconds QWebSocketServer::handshakeTimeout() const
Возвращает таймаут рукопожатия для новых подключений в миллисекундах.
Значение по умолчанию — 10 секунд. Если peer тратит больше времени на завершение рукопожатия, их соединение закрывается.
Эта функция была добавлена в Qt 5.14.
См. также setHandshakeTimeout() и handshakeTimeoutMS().
[since 5.14] int QWebSocketServer::handshakeTimeoutMS() const
Возвращает таймаут рукопожатия для новых подключений в миллисекундах.
Значение по умолчанию — 10 секунд. Если peer тратит больше времени на завершение рукопожатия, их соединение закрывается.
Эта функция была добавлена в Qt 5.14.
См. также setHandshakeTimeout() и handshakeTimeout().
bool QWebSocketServer::hasPendingConnections() const
Возвращает true, если сервер имеет ожидающие подключения; в противном случае возвращает false.
См. также nextPendingConnection() и setMaxPendingConnections().
bool QWebSocketServer::isListening() const
Возвращает true, если сервер в данный момент прослушивает входящие подключения; в противном случае возвращает false. Если прослушивание завершается неудачно, error() вернёт причину.
bool QWebSocketServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
Указывает серверу прослушивать входящие подключения по адресу address и порту port. Если port равно 0, порт выбирается автоматически. Если address равен QHostAddress::Any, сервер будет прослушивать все сетевые интерфейсы.
Возвращает true при успехе; в противном случае возвращает false.
См. также isListening().
int QWebSocketServer::maxPendingConnections() const
Возвращает максимальное количество ожидающих подключений. Значение по умолчанию — 30.
См. также setMaxPendingConnections() и hasPendingConnections().
[virtual] QWebSocket *QWebSocketServer::nextPendingConnection()
Возвращает следующее ожидающее подключение как подключённый объект QWebSocket. QWebSocketServer не принимает владения возвращённым объектом QWebSocket. От пользователя требуется явно удалить объект, когда он больше не нужен, иначе произойдёт утечка памяти. Возвращает nullptr, если функция вызывается, когда нет ожидающих подключений.
Примечание: возвращённый объект QWebSocket нельзя использовать из другого потока.
См. также hasPendingConnections().
void QWebSocketServer::pauseAccepting()
Приостанавливает входящие новые подключения. Ожидающие подключения останутся в очереди.
См. также resumeAccepting().
QNetworkProxy QWebSocketServer::proxy() const
Возвращает сетевой прокси для этого сервера. По умолчанию используется QNetworkProxy::DefaultProxy.
См. также setProxy().
void QWebSocketServer::resumeAccepting()
Возобновляет приём новых подключений.
См. также pauseAccepting().
QWebSocketServer::SslMode QWebSocketServer::secureMode() const
Возвращает режим безопасности, в котором работает сервер.
См. также QWebSocketServer() и SslMode.
QHostAddress QWebSocketServer::serverAddress() const
Возвращает адрес сервера, если сервер прослушивает подключения; в противном случае возвращает QHostAddress::Null.
См. также serverPort() и listen().
QString QWebSocketServer::serverName() const
Возвращает имя сервера, используемое во время фазы рукопожатия HTTP.
См. также setServerName().
quint16 QWebSocketServer::serverPort() const
Возвращает порт сервера, если сервер прослушивает подключения; в противном случае возвращает 0.
См. также serverAddress() и listen().
QUrl QWebSocketServer::serverUrl() const
Возвращает URL, который клиенты могут использовать для подключения к этому серверу, если сервер прослушивает подключения. В противном случае возвращается недействительный URL.
См. также serverPort(), serverAddress() и listen().
[since 5.14] void QWebSocketServer::setHandshakeTimeout(std::chrono::milliseconds msec)
Устанавливает таймаут рукопожатия для новых подключений в msec миллисекунд.
По умолчанию он устанавливается на 10 секунд. Если peer тратит больше времени на завершение рукопожатия, их соединение закрывается. Вы можете передать отрицательное значение (например, -1) для отключения таймаута.
Эта функция была добавлена в Qt 5.14.
См. также handshakeTimeout() и handshakeTimeoutMS().
void QWebSocketServer::setHandshakeTimeout(int msec)
Это перегруженная функция.
void QWebSocketServer::setMaxPendingConnections(int numConnections)
Устанавливает максимальное количество ожидающих подключений на numConnections. WebSocketServer примет не более numConnections входящих подключений, прежде чем будет вызвано nextPendingConnection(). По умолчанию ограничение составляет 30 ожидающих подключений.
QWebSocketServer излучит сигнал error() с кодом закрытия QWebSocketProtocol::CloseCodeAbnormalDisconnection, когда максимальное число подключений будет достигнуто. Рукопожатие веб-сокета завершится неудачей, и сокет будет закрыт.
См. также maxPendingConnections() и hasPendingConnections().
void QWebSocketServer::setProxy(const QNetworkProxy &networkProxy)
Устанавливает явный сетевой прокси для этого сервера на networkProxy.
Чтобы отключить использование прокси-сервера, используйте тип прокси QNetworkProxy::NoProxy:
server->setProxy(QNetworkProxy::NoProxy);
См. также proxy().
void QWebSocketServer::setServerName(const QString &serverName)
Устанавливает имя сервера, которое будет использоваться во время фазы рукопожатия HTTP, на заданное значение serverName. serverName может быть пустым, в этом случае клиенту будет отправлено пустое имя сервера. Существующие подключённые клиенты не будут уведомлены об этом изменении, только новые подключённые клиенты увидят новое имя.
См. также serverName().
[since 5.3] bool QWebSocketServer::setSocketDescriptor(qintptr socketDescriptor)
Устанавливает дескриптор сокета, который этот сервер должен использовать при прослушивании входящих подключений, на socketDescriptor.
Возвращает true, если сокет установлен успешно; в противном случае возвращает false. Предполагается, что сокет находится в состоянии прослушивания.
Эта функция была добавлена в Qt 5.3.
См. также socketDescriptor() и isListening().
void QWebSocketServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
Устанавливает конфигурацию SSL для QWebSocketServer на sslConfiguration. Этот метод не имеет эффекта, если QWebSocketServer работает в ненадежном режиме (QWebSocketServer::NonSecureMode).
См. также sslConfiguration() и SslMode.
[since 5.3] qintptr QWebSocketServer::socketDescriptor() const
Возвращает дескриптор системного сокета, используемый сервером для прослушивания входящих подключений, или -1, если сервер не прослушивает. Если сервер использует QNetworkProxy, возвращённый дескриптор может не быть пригодным для использования с функциями системных сокетов.
Эта функция была добавлена в Qt 5.3.
См. также setSocketDescriptor() и isListening().
QSslConfiguration QWebSocketServer::sslConfiguration() const
Возвращает конфигурацию SSL, используемую QWebSocketServer. Если сервер не работает в защищённом режиме (QWebSocketServer::SecureMode), этот метод возвращает QSslConfiguration::defaultConfiguration().
См. также setSslConfiguration(), SslMode и QSslConfiguration::defaultConfiguration().
QList<QWebSocketProtocol::Version> QWebSocketServer::supportedVersions() const
Возвращает список версий WebSocket, которые поддерживаются этим сервером.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qwebsocketserver.html