Visindigo::Network::SSERequest Class
class Visindigo::Network::SSERequestSSE 请求描述对象. 详情...
| 头文件: | #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 开始支持。