QWebSocketServer 类

实现基于 WebSocket 的服务器。 更多...

头: #include <QWebSocketServer>
qmake: QT += websockets
Since: Qt 5.3
继承: QObject

该类在 Qt 5.3 引入。

公共类型

enum SslMode { SecureMode, NonSecureMode }

公共函数

QWebSocketServer (const QString & serverName , QWebSocketServer::SslMode secureMode , QObject * parent = nullptr)
virtual ~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
qintptr nativeDescriptor () const
virtual 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 )
bool setNativeDescriptor (qintptr socketDescriptor )
void setProxy (const QNetworkProxy & networkProxy )
void setServerName (const QString & serverName )
void setSslConfiguration (const QSslConfiguration & sslConfiguration )
QSslConfiguration sslConfiguration () const
QList<QWebSocketProtocol::Version> supportedVersions () const

信号

void acceptError (QAbstractSocket::SocketError socketError )
void closed ()
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 in QAbstractSocket::ConnectedState ,可以用于与客户端进行通信。

若出现错误, serverError () 返回错误的类型,且 errorString () 可以被调用,以获得发生什么的人类可读描述。

当监听连接时,服务器正监听的可用地址和端口为 serverAddress () 和 serverPort ().

调用 close () 使 QWebSocketServer 停止监听传入连接。

QWebSocketServer 目前不支持 WebSocket 扩展 and WebSocket 子协议 .

注意: 当与自签名证书一起工作时, Firefox bug 594502 阻止 Firefox 去连接到安全 WebSocket 服务器。要解决此问题,先浏览到安全 WebSocket 服务器使用 HTTPS。FireFox 将指示证书无效。从这里开始,证书会被添加到异常。在此之后,安全 WebSocket 连接应该工作。

QWebSocketServer 只支持第 13 版的 WebSocket 协议, 如提纲于 RFC 6455 .

为避免拒绝服务,默认连接握手超时为 10 秒,还可以定制使用 setHandshakeTimeout ().

另请参阅 WebSocket 服务器范例 and QWebSocket .

成员类型文档编制

enum QWebSocketServer:: SslMode

指示服务器操作是通过 wss (SecureMode) 还是通过 ws (NonSecureMode)

常量 描述
QWebSocketServer::SecureMode 0 服务器运转于安全模式下 (通过 wss)
QWebSocketServer::NonSecureMode 1 服务器运转于非安全模式下 (通过 wss)

成员函数文档编制

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] void QWebSocketServer:: closed ()

此信号被发射当服务器关闭其连接时。

另请参阅 close ().

[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] void QWebSocketServer:: preSharedKeyAuthenticationRequired ( QSslPreSharedKeyAuthenticator * authenticator )

QWebSocketServer 发射此信号当它协商 PSK (预共享密钥) 密码套件时,因此接着需要 PSK 身份验证。

当使用 PSK 时,客户端必须向服务器发送有效标识和有效 PSK (预共享密钥) 以便 SSL 握手得以继续。应用程序可以在此信号连接的槽中提供此信息,通过填入传递的 authenticator 对象根据需要。

注意: 忽略此信号或未能提供要求证书,将导致握手失败,因此连接将被中止。

注意: authenticator 对象由套接字所拥有且不能被删除通过应用程序。

该函数在 Qt 5.8 引入。

另请参阅 QSslPreSharedKeyAuthenticator and QSslSocket::preSharedKeyAuthenticationRequired ().

[signal] void QWebSocketServer:: serverError ( QWebSocketProtocol::CloseCode closeCode )

此信号被发射当设置 WebSocket 连接期间发生错误时。 closeCode 参数描述发生错误的类型

另请参阅 errorString ().

[signal] void QWebSocketServer:: sslErrors (const QList < QSslError > & errors )

QWebSocketServer 发射此信号在 SSL 握手之后以指示当建立对等方标识时有发生一个或多个错误。错误通常指示 QWebSocketServer 无法安全地识别对等方。除非采取任何行动,连接将被丢弃在此信号被发射之后。

errors 包含一个或多个错误阻止 QSslSocket 验证对等方身份。

另请参阅 peerVerifyError ().

[override virtual] QWebSocketServer:: ~QWebSocketServer ()

销毁 QWebSocketServer 对象。若服务器正在监听连接,套接字将自动关闭。任何客户端 QWebSocket 仍在队列的将被关闭并删除。

另请参阅 close ().

void QWebSocketServer:: close ()

关闭服务器。服务器将不再监听传入连接。

QWebSocketProtocol::CloseCode QWebSocketServer:: error () const

返回最后发生错误的错误代码。若没有发生错误, QWebSocketProtocol::CloseCodeNormal 被返回。

另请参阅 errorString ().

QString QWebSocketServer:: errorString () const

返回人类可读的最后发生的错误的描述。若未发生错误,返回空字符串。

另请参阅 serverError ().

void QWebSocketServer:: handleConnection ( QTcpSocket * socket ) const

升级 TCP socket 到 WebSocket。

QWebSocketServer 对象将拥有套接字对象的所有权,并在适当时删除它。

该函数在 Qt 5.9 引入。

std::chrono::milliseconds QWebSocketServer:: handshakeTimeout () const

返回新连接的握手超时 (以毫秒为单位)。

默认为 10 秒。若对等方使用更多的时间完成握手,其连接会被关闭。

该函数在 Qt 5.14 引入。

另请参阅 setHandshakeTimeout () 和 handshakeTimeoutMS ().

int QWebSocketServer:: handshakeTimeoutMS () const

返回新连接的握手超时 (以毫秒为单位)。

默认为 10 秒。若对等方使用更多的时间完成握手,其连接会被关闭。

该函数在 Qt 5.14 引入。

另请参阅 setHandshakeTimeout () 和 handshakeTimeout ().

bool QWebSocketServer:: hasPendingConnections () const

返回 true 若服务器有待决连接;否则返回 false。

另请参阅 nextPendingConnection () 和 setMaxPendingConnections ().

bool QWebSocketServer:: isListening () const

返回 true 若服务器目前正在监听传入连接;否则返回 false。若监听失败, error () 将返回原因。

另请参阅 listen () 和 error ().

bool QWebSocketServer:: listen (const QHostAddress & address = QHostAddress::Any, quint16 port = 0)

告诉服务器去监听传入连接在地址 address 和端口 port 。若 port 为 0,自动选取端口。若 address is QHostAddress::Any ,服务器将监听所有网络接口。

返回 true 当成功时;否则返回 false。

另请参阅 isListening ().

int QWebSocketServer:: maxPendingConnections () const

返回最大待决已接受连接数。默认为 30。

另请参阅 setMaxPendingConnections () 和 hasPendingConnections ().

qintptr QWebSocketServer:: nativeDescriptor () const

返回服务器用于监听传入指令的本机套接字描述符,或 -1 若服务器未监听。若服务器正在使用 QNetworkProxy ,返回的描述符可能不能用于本机套接字函数。

该函数在 Qt 5.12 引入。

另请参阅 setNativeDescriptor () 和 isListening ().

[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 ().

void QWebSocketServer:: setHandshakeTimeout ( std::chrono::milliseconds msec )

把新连接的握手超时设为 msec 毫秒。

默认情况下,这被设为 10 秒。若对等方使用更多时间去完成握手,其连接就会被关闭。可以传递负值 (如 -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 关闭代码当达到最大连接数时。WebSocket 握手将失败且套接字会被关闭。

另请参阅 maxPendingConnections () 和 hasPendingConnections ().

bool QWebSocketServer:: setNativeDescriptor ( qintptr socketDescriptor )

把此服务器在监听传入连接时应该使用的套接字描述符设为 socketDescriptor .

返回 true,若套接字设置成功;否则返回 false。假定套接字处于监听状态。

该函数在 Qt 5.12 引入。

另请参阅 nativeDescriptor () 和 isListening ().

void QWebSocketServer:: setProxy (const QNetworkProxy & networkProxy )

把此服务器的显式网络代理设为 networkProxy .

要禁用代理的使用,使用 QNetworkProxy::NoProxy 代理类型:

server->setProxy(QNetworkProxy::NoProxy);
					

另请参阅 proxy ().

void QWebSocketServer:: setServerName (const QString & serverName )

把 HTTP 握手阶段将使用的服务器名称设为给定 serverName serverName 可以为空,在此情况下,将向客户端发送空服务器名称。现有已连接客户端不会被通知对于此改变,仅新近连接客户端会见到此新名称。

另请参阅 serverName ().

void QWebSocketServer:: setSslConfiguration (const QSslConfiguration & sslConfiguration )

设置 SSL 配置为 QWebSocketServer to sslConfiguration 。此方法不起作用若 QWebSocketServer 运行在非安全模式下 ( QWebSocketServer::NonSecureMode ).

另请参阅 sslConfiguration () 和 SslMode .

QSslConfiguration QWebSocketServer:: sslConfiguration () const

返回 SSL 配置使用通过 QWebSocketServer 。若服务器未运行在安全模式下 ( QWebSocketServer::SecureMode ),此方法返回 QSslConfiguration::defaultConfiguration ().

另请参阅 setSslConfiguration (), SslMode ,和 QSslConfiguration::defaultConfiguration ().

QList < QWebSocketProtocol::Version > QWebSocketServer:: supportedVersions () const

返回此服务器支持的 WebSocket 版本列表。