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

Visindigo::Network::SSERequest Class

class Visindigo::Network::SSERequest

SSE 请求描述对象. 详情...

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

公开成员函数

(自 Visindigo 0.17.0 引入) SSERequest(const Visindigo::Network::HttpRequest &request)
(自 Visindigo 0.17.0 引入) QString getLastEventId() const
(自 Visindigo 0.17.0 引入) Visindigo::Network::HttpRequest &getRequest()
(自 Visindigo 0.17.0 引入) bool isAutoReconnectEnabled() const
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSERequest &setAutoReconnect(bool enabled, qint32 maxAttempts = 5)
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSERequest &setLastEventId(const QString &id)
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSERequest &setMaxFrameBytes(qint64 bytes)
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSERequest &setRequest(const Visindigo::Network::HttpRequest &request)
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSERequest &setStreamDecoder(std::shared_ptr<Visindigo::Network::IStreamDecoder> decoder)
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSERequest &setTimeoutMs(qint32 ms)

详细说明

SSERequest 与 Visindigo::Network::HttpRequest 是组合关系而非继承关系: 内层持有一个 HttpRequest,本类把它对外的接口逐项转发一遍,并额外提供 SSE 专属的设置项。

转发的接口与 HttpRequest 保持分类与顺序一致,便于对照维护,但对 SSE 无意义 的落盘与内存缓存相关接口不予提供——中心对 SSE 强制按流式交付,即便提供 也会被忽略,不如不给。

提交时中心会自动挂载 Visindigo::Network::SseDecoder 并按流式交付, 事件经 Visindigo::Network::SSEReply::frameReceived 与 Visindigo::Network::SSEReply::when() 送达。

Note: 本类上那批转发接口(setUrl、setHeader、setRetryPolicy……)与 Visindigo::Network::HttpRequest 上的同名方法语义完全相同,只是把返回值 由 HttpRequest& 换成了 SSERequest& 以保持链式书写。它们的详细说明 请参见 HttpRequest 上的对应方法,此处不再重述——同一段语义只保留一个 出处,避免两边描述日久失配。

其中三个方法的语义与 HttpRequest 上的同名者并不完全一致,已在本类上 单独说明:setTimeoutMs(长连接不应使用)、setStreamDecoder (默认已挂载 SseDecoder)与 setMaxFrameBytes

另请参阅 Visindigo::Network::SSEReply.

成员函数文档

[explicit, since Visindigo 0.17.0] SSERequest::SSERequest(const Visindigo::Network::HttpRequest &request)

以已有的通用请求初始化内层配置。标记为 explicit 是为了避免 HttpRequest 隐式转换成本类型——若允许隐式转换,中心那两个重载的解析会变得难以预测。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] QString SSERequest::getLastEventId() const

返回已设置的续传起点。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] Visindigo::Network::HttpRequest &SSERequest::getRequest()

返回内层请求的引用。它主要作为"逃生舱"存在:需要把配置交给某个接受 HttpRequest 的接口时使用,日常设置请直接调用本类的转发接口。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] bool SSERequest::isAutoReconnectEnabled() const

返回是否启用了自动重连。

return 启用时返回 true。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] Visindigo::Network::SSERequest &SSERequest::setAutoReconnect(bool enabled, qint32 maxAttempts = 5)

设置断开后是否自动重连,以及最多重连几次。默认开启,最多 5 次。

重连时会自动带上最近一次收到的事件标识,因此上层逻辑通常无需关心重连 过程,只有确实断线时才会感知到。

enabled 是否自动重连。 maxAttempts 最多重连次数。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] Visindigo::Network::SSERequest &SSERequest::setLastEventId(const QString &id)

设置断线续传的起点。提交后它会以 Last-Event-ID 请求头发送,服务端据此 从该标识之后继续推送,从而避免重连时重复收到已经处理过的事件。

id 续传起点的事件标识。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] Visindigo::Network::SSERequest &SSERequest::setMaxFrameBytes(qint64 bytes)

设置单帧上限,默认 1 MiB。语义与 HttpRequest 上的同名方法一致, 无需单独说明;这里把它列出来只是为了提醒:服务端如果持续发送空白行 (保活心跳),帧长度会保持在很低的水平,本项对它是无效的防御。

bytes 单帧上限,单位为字节。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] Visindigo::Network::SSERequest &SSERequest::setRequest(const Visindigo::Network::HttpRequest &request)

整体替换内层请求配置。

request 新的内层请求。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] Visindigo::Network::SSERequest &SSERequest::setStreamDecoder(std::shared_ptr<Visindigo::Network::IStreamDecoder> decoder)

替换流帧解码器。

Note: HttpRequest 不同:SSE 请求提交时中心会自动挂载 SseDecoder, 通常不需要调用本函数。只有在服务端发的并不是标准 SSE、需要自定切分规则时 才用得上;此时务必确认自定解码器能处理 event / data 字段, 否则 SSEReply::when() 就无从匹配。

decoder 自定义解码器。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] Visindigo::Network::SSERequest &SSERequest::setTimeoutMs(qint32 ms)

设置总超时毫秒数。

Warning: 本项对 SSE 是危险的。流式连接本来就会持续很久,总超时到达后 中心会直接掰断连接,表现为“流每隔一段时间就断”。应当使用 setIdleTimeoutMs() 控制空闲超时,它能在“对端确实挂了”与“对端只是 暂时没话说”之间做出正确区分。

ms 总超时毫秒数。

这个function 从 Visindigo 0.17.0 开始支持。