class QWebSocketServer#

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

Inheritance diagram of PySide6.QtWebSockets.QWebSocketServer

概要#

方法#

虚函数#

信号#

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建问题单的方式让我们知道

详细描述#

它基于QTcpServer构建,功能也相同。所以,如果你熟悉如何使用QTcpServer,那么你也就知道了如何使用 QWebSocketServer。这个类使得接受传入的WebSocket连接成为可能。你可以指定端口号,或者让 QWebSocketServer 自动选择一个。你可以监听特定地址或所有机器的地址。调用 listen() 以让服务器监听传入的连接。

每次客户端连接到服务器时,都会发出 newConnection() 信号。调用 nextPendingConnection() 接受挂起的连接作为已连接的 QWebSocket。该函数返回一个指向 QAbstractSocket::ConnectedState 的 QWebSocket 的指针,你可以使用它来与客户端进行通信。

如果发生错误,serverError() 返回错误类型,可以调用 errorString() 获取发生情况的描述。

在监听连接时,服务器监听的地址和端口号可通过 serverAddress()serverPort() 获取。

调用 QWebSocketServerclose() 使得它停止监听传入的连接。

当前 QWebSocketServer 不支持 WebSocket 扩展

注意

在处理自签名证书时,Firefox bug 594502 阻止 Firefox 连接到安全的WebSocket服务器。为了解决这个问题,首先使用HTTPS浏览到安全的WebSocket服务器。Firefox将表示证书无效。从现在开始,可以将证书添加到例外。之后,安全的WebSockets连接应该可以正常工作。

QWebSocketServer 只支持 WebSocket 协议的 13 版本,如 RFC 6455 中所述。

默认连接握手超时时间为 10 秒,以避免拒绝服务攻击,可以通过 setHandshakeTimeout() 进行自定义。

class SslMode#

表示服务器是否通过 wss (安全模式) 或 ws (非安全模式) 运行

常量

描述

QWebSocketServer.SecureMode

服务器以安全模式运行 (通过 wss)

QWebSocketServer.NonSecureMode

服务器以非安全模式运行 (通过 ws)

__init__(serverName, secureMode[, parent=None])#
参数:

使用给定的 serverName 构造一个新的 QWebSocketServer。在 HTTP 握手阶段,serverName 用于识别服务器。它可以是空的,在这种情况下,不会将服务器名称发送给客户端。secureMode 参数指示服务器是否通过 wss ( SecureMode ) 或 ws 运行 ( NonSecureMode )。

parent 被传递给 QObject 构造函数。

acceptError(socketError)#
参数:

socketErrorSocketError

当新连接的接受导致错误时,会发出此信号。参数 socketError 描述了发生的错误类型。

alertReceived(level, type, description)#
参数:

QWebSocketServer 如果从对等方接收到警报消息,则会发出此信号。 level 描述警报是致命的还是警告。 type 是说明为什么发送警报的代码。如果可用,警报消息的文本描述将包含在 description 中。

注意

该信号主要用于信息性和调试目的,无需在应用中进行任何处理。如果警报是致命的,底层后端会处理它并关闭连接。

注意

并非所有后端都支持此功能。

参阅

alertSent() AlertType

alertSent(level, type, description)#
参数:

QWebSocketServer 如果向对等方发送警报消息,则会发出此信号。 level 描述它是一个警告还是致命错误。 type 提供警报消息的代码。如果可用,警报消息的文本描述将包含在 description 中。

注意

此信号主要用于信息性和调试目的,通常不需要从应用中进行任何操作。

注意

并非所有后端都支持此功能。

参阅

alertReceived() AlertType

close()#

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

closed()#

当服务器关闭连接时,会发出此信号。

参阅

close()

error()#
返回类型:

CloseCode

返回最后发生的错误的错误代码。如果没有发生错误,则返回CloseCodeNormal

参阅

errorString()

errorString()#
返回类型:

str

返回最后发生的错误的可读描述。如果没有发生错误,则返回空字符串。

参阅

serverError()

handleConnection(socket)#
参数:

socketQTcpSocket

将TCP socket升级为WebSocket。

QWebSocketServer对象将自行拥有socket对象,并在适当的时候删除它。

handshakeInterruptedOnError(error)#
参数:

errorQSslError

如果找到证书验证错误,并且启用了QSslConfiguration中的早期错误报告,则QWebSocketServer会发出此信号。

handshakeTimeoutMS()#
返回类型:

int

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

默认为10秒。如果一个对等方用时更多来完成握手,其连接将关闭。

参阅

setHandshakeTimeout() handshakeTimeout()

hasPendingConnections()#
返回类型:

bool

如果服务器有挂起的连接,则返回true;否则返回false。

isListening()#
返回类型:

bool

如果服务器当前正在侦听传入的连接,则返回 true;否则返回 false。如果侦听失败,则 error() 将返回原因。

参阅

listen() error()

listen([address=QHostAddress.Any[, port=0]])#
参数:
返回类型:

bool

告知服务器在指定地址 address 和端口 port 上监听传入的连接。如果 port 为 0,则将自动选择端口。如果 address 是 QHostAddress::Any,则服务器将在所有网络接口上监听。

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

参阅

isListening()

maxPendingConnections()#
返回类型:

int

返回挂起的已接受连接的最大数量。默认值为 30。

nativeDescriptor()#
返回类型:

qintptr

注意

此函数已弃用。

返回服务器用于监听传入指令的本地套接字描述符,或者在服务器不在监听时返回 -1。如果服务器使用 QNetworkProxy,则返回的描述符可能无法与本地套接字函数一起使用。

newConnection()#

每当有新的连接可用时,都会发出此信号。

nextPendingConnection()#
返回类型:

QWebSocket

返回下一个挂起的连接,作为一个连接的 QWebSocket 对象。 QWebSocketServer 不拥有返回的 QWebSocket 对象。调用者负责在不再使用对象时显式删除它,否则会出现内存泄漏。如果没有挂起的连接,此函数调用将返回 nullptr。

注意:返回的 QWebSocket 对象不能在另一个线程中使用。

originAuthenticationRequired(pAuthenticator)#
参数:

pAuthenticatorQWebSocketCorsAuthenticator

当请求新的连接时,会发出此信号。连接到此信号的槽应该指示是否允许(可以通过 origin() 调用确定的) originate (通过发行 setAllowed() ) 在 authenticator 对象中。

如果没有槽连接到此信号,默认将接受所有来源。

注意

由于连接总会成功,因此无法使用队列连接来连接到此信号。

pauseAccepting()#

暂停进入的新连接。队列中的连接将保留在队列中。

peerVerifyError(error)#
参数:

errorQSslError

QWebSocketServer 在建立加密之前,在 SSL 握手过程中可以多次发出此信号,以指示在建立对端身份时出现错误。错误通常表明 QWebSocketServer 无法安全地对对端进行身份验证。

该信号在出现问题时为您提供早期指示。通过连接到该信号,您可以在握手完成之前手动选择从连接槽内部断开连接。如果不采取任何措施,QWebSocketServer将进入发出sslErrors()

参阅

sslErrors()

preSharedKeyAuthenticationRequired(authenticator)#
参数:

authenticatorQSslPreSharedKeyAuthenticator

QWebSocketServer在协商PSK加密套件时发出此信号,因此需要PSK身份验证。

使用PSK时,客户端必须向服务器发送一个有效的身份信息和有效的预共享密钥,以便SSL握手继续进行。应用程序可以通过将信号连接到插槽来提供这些信息,并按照他们的需要填充传入的authenticator对象。

注意

忽略此信号或未能提供所需的凭据将导致握手失败,从而导致连接中断。

注意

authenticator对象归套口所有,应用程序不得删除。

参阅

preSharedKeyAuthenticationRequired()

proxy()#
返回类型:

QNetworkProxy

返回此服务器的网络代理。默认情况下使用QNetworkProxy::DefaultProxy。

参阅

setProxy()

resumeAccepting()#

继续接受新的连接。

secureMode()#
返回类型:

SslMode

返回服务器正在运行的加密模式。

参阅

QWebSocketServer() SslMode

serverAddress()#
返回类型:

QHostAddress

如果服务器正在侦听连接,则返回服务器的地址;否则返回QHostAddress::Null。

serverError(closeCode)#
参数:

closeCodeCloseCode

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

参阅

errorString()

serverName()#
返回类型:

str

返回在http握手阶段使用的服务器名称。

serverPort()#
返回类型:

int

如果服务器正在侦听连接,则返回服务器的端口号;否则返回0。

serverUrl()#
返回类型:

QUrl

在服务器正在侦听连接时,返回客户端可以用来连接此服务器的URL。否则返回一个无效的URL。

setHandshakeTimeout(msec)#
参数:

msec – int

这是一个重载函数。

setMaxPendingConnections(numConnections)#
参数:

numConnections – int

将待接受连接的最大数量设置为numConnections。在调用nextPendingConnection()之前,QWebSocketServer不会接受超过numConnections的传入连接。默认情况下,限制为30个待接受连接。

当达到连接的最大数量时,QWebSocketServer将发出带有CloseCodeAbnormalDisconnection关闭代码的error()信号。WebSocket握手将失败,套接字将被关闭。

setNativeDescriptor(descriptor)#
参数:

descriptorqintptr

返回类型:

bool

注意

此函数已弃用。

设置服务器应使用的套接字描述符,以便在侦听传入连接时使用 socketDescriptor

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

setProxy(networkProxy)#
参数:

networkProxyQNetworkProxy

将此服务器的显式网络代理设置为 networkProxy

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

server->setProxy(QNetworkProxy::NoProxy);

参阅

proxy()

setServerName(serverName)#
参数:

serverName – str

将用于 HTTP 握手阶段的服务器名称设置为给定的 serverName。当 serverName 为空时,将发送一个空的服务器名称到客户端。现有的已连接客户端不会通知此更改,只有新连接的客户端将看到此新名称。

参阅

serverName()

setSocketDescriptor(socketDescriptor)#
参数:

socketDescriptorqintptr

返回类型:

bool

设置服务器应使用的套接字描述符,以便在侦听传入连接时使用 socketDescriptor

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

setSslConfiguration(sslConfiguration)#
参数:

sslConfigurationQSslConfiguration

设置 QWebSocketServer 的 SSL 配置为 sslConfiguration。如果 QWebSocketServer 未运行在安全模式下(NonSecureMode),则该方法无效果。

setSupportedSubprotocols(protocols)#
参数:

protocols – 字符串列表

将服务器支持的协议列表设置为 protocols

socketDescriptor()#
返回类型:

qintptr

返回服务器用于监听传入指令的本地套接字描述符,或者在服务器不在监听时返回 -1。如果服务器使用 QNetworkProxy,则返回的描述符可能无法与本地套接字函数一起使用。

sslConfiguration()#
返回类型:

QSslConfiguration

返回 QWebSocketServer 使用的 SSL 配置。如果服务器未运行在安全模式下(SecureMode),则此方法返回 QSslConfiguration::defaultConfiguration()。

sslErrors(errors)#
参数:

errors – .QSslError 列表

QWebSocketServer 在SSL握手完成后发出此信号以指示在建立对等方身份时发生了一个或多个错误。这些错误通常表明 QWebSocketServer 无法安全地识别对等方。除非采取任何操作,否则连接将在发出该信号后断开。

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

supportedSubprotocols()#
返回类型:

字符串列表

返回服务器支持的协议列表。

supportedVersions()#
返回类型:

. QWebSocketProtocol.Version 列表

返回该服务器支持的网络套接字版本列表。