跳到正文
Yayin Story Studio Yayin Story Studio 项目文档

Visindigo::Network::WebSocketSession Class

class Visindigo::Network::WebSocketSession

WebSocket 会话句柄. 详情...

头文件: #include <Network/WebSocketRequest.h>
自以下版本: Visindigo 0.17.0

公开成员函数

(自 Visindigo 0.17.0 引入) void abort()
(自 Visindigo 0.17.0 引入) Visindigo::Network::WebSocketSession &bindLifecycleTo(QObject *context)
(自 Visindigo 0.17.0 引入) void close(quint16 code = 1000, const QString &reason = QString())
(自 Visindigo 0.17.0 引入) quint64 getId() const
(自 Visindigo 0.17.0 引入) bool isConnected() const
(自 Visindigo 0.17.0 引入) void sendBinary(const QByteArray &data)
(自 Visindigo 0.17.0 引入) void sendPing(const QByteArray &payload = QByteArray())
(自 Visindigo 0.17.0 引入) void sendText(const QString &text)

信号

(自 Visindigo 0.17.0 引入) void binaryMessageReceived(const QByteArray &message)
(自 Visindigo 0.17.0 引入) void connected()
(自 Visindigo 0.17.0 引入) void disconnected(quint16 closeCode, const QString &reason)
(自 Visindigo 0.17.0 引入) void errorOccurred(const Visindigo::Network::HttpError &error)
(自 Visindigo 0.17.0 引入) void pingReceived(const QByteArray &payload)
(自 Visindigo 0.17.0 引入) void reconnecting(qint32 attempt, qint32 delayMs)
(自 Visindigo 0.17.0 引入) void textMessageReceived(const QString &message)

详细说明

相对裸用 QWebSocket,本类补齐的是工程上真正需要的部分:心跳保活、 指数退避重连、统一的错误类型、消息大小限制,以及把会话纳入请求中心的 统一取消与统计。

Note: 与 HTTP 句柄不同,会话默认不会自动销毁:WebSocket 是长连接, 没有"请求结束"的时刻可以触发销毁。请在确定不再需要时调用 Visindigo::Network::WebSocketSession::close() 或释放对象。

成员函数文档

[since Visindigo 0.17.0] void WebSocketSession::abort()

立即中断连接,不进行关闭握手。用于对象即将销毁或需要立刻切断的场景。

这个function 从 Visindigo 0.17.0 开始支持。

[signal, since Visindigo 0.17.0] void WebSocketSession::binaryMessageReceived(const QByteArray &message)

收到二进制消息,原样交付、不做任何解释。

message 二进制消息内容。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] Visindigo::Network::WebSocketSession &WebSocketSession::bindLifecycleTo(QObject *context)

把会话的生命周期绑定到另一个对象:该对象销毁时会话自动关闭。

这对 WebSocket 尤其必要——长连接不会自己结束,若界面已经销毁而会话仍在, 就会持续占用连接并接收无人处理的消息。

context 要绑定到的对象;传 nullptr 表示不绑定。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] void WebSocketSession::close(quint16 code = 1000, const QString &reason = QString())

正常关闭连接。主动关闭会抑制自动重连,因为"调用方想关"与"连接掉了" 是两种完全不同的情况。

code 关闭码。 reason 关闭原因文本。

这个function 从 Visindigo 0.17.0 开始支持。

[signal, since Visindigo 0.17.0] void WebSocketSession::connected()

握手完成,连接可用。重连成功后也会再次发出。

这个function 从 Visindigo 0.17.0 开始支持。

[signal, since Visindigo 0.17.0] void WebSocketSession::disconnected(quint16 closeCode, const QString &reason)

连接关闭。closeCode 是关闭码,reason 是对方给出的原因文本,可能为空。

Note: 走到这里说明会话已经停止尝试,不会再自行恢复:重连是断开之前的动作。

这个function 从 Visindigo 0.17.0 开始支持。

[signal, since Visindigo 0.17.0] void WebSocketSession::errorOccurred(const Visindigo::Network::HttpError &error)

发生错误。错误分类与 HTTP 侧共用同一套 HttpError,处理逻辑可以直接复用。

Note: 它不表示会话已经结束:开启了自动重连时会话会继续尝试,最终的结局仍然 由 disconnectedconnected 给出。

error 错误分类与描述。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] quint64 WebSocketSession::getId() const

返回会话编号,进程内唯一,可用于日志关联。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] bool WebSocketSession::isConnected() const

判断当前是否处于已连接状态。

return 处于已连接状态时返回 true。

这个function 从 Visindigo 0.17.0 开始支持。

[signal, since Visindigo 0.17.0] void WebSocketSession::pingReceived(const QByteArray &payload)

收到对端心跳帧。底层会自动回应 pong,这里只是通知,一般不需要处理。

payload 心跳帧载荷,可能为空。

这个function 从 Visindigo 0.17.0 开始支持。

[signal, since Visindigo 0.17.0] void WebSocketSession::reconnecting(qint32 attempt, qint32 delayMs)

连接断开后正在等待重连。attempt 是第几次尝试,delayMs 是即将等待的毫秒数。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] void WebSocketSession::sendBinary(const QByteArray &data)

发送二进制消息。

data 二进制消息内容。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] void WebSocketSession::sendPing(const QByteArray &payload = QByteArray())

发送 ping 帧。对端应当回以 pong,后者经 pingReceived 信号通知。

payload 心跳帧载荷,可为空。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] void WebSocketSession::sendText(const QString &text)

发送文本消息。未连接时调用不会有任何效果,也不会缓存待发—— 重连后自动补发会带来语义上的不确定性,应交由上层决定。

text 文本消息内容。

这个function 从 Visindigo 0.17.0 开始支持。

[signal, since Visindigo 0.17.0] void WebSocketSession::textMessageReceived(const QString &message)

收到文本消息,message 已按 UTF-8 解码。

这个function 从 Visindigo 0.17.0 开始支持。