Visindigo::Network::SSEReply Class
class Visindigo::Network::SSEReplySSE 请求的句柄. 详情...
| 头文件: | #include <Network/SSERequest.h> |
| 自以下版本: | Visindigo 0.17.0 |
| 继承自: | Visindigo::Network::HttpReply |
公开成员函数
(自 Visindigo 0.17.0 引入) QString | getLastEventId() const |
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSEReply & | when(const QString &eventName, std::function<bool (const StreamFrame &)> handler) |
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSEReply & | when(const QString &eventName, QObject *context, std::function<bool (const StreamFrame &)> handler) |
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSEReply & | when(std::function<bool (const StreamFrame &)> predicate, QObject *context, std::function<bool (const StreamFrame &)> handler) |
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSEReply & | whenOnce(const QString &eventName, QObject *context, std::function<bool (const StreamFrame &)> handler) |
(自 Visindigo 0.17.0 引入) Visindigo::Network::SSEReply & | whenOnce(std::function<bool (const StreamFrame &)> predicate, QObject *context, std::function<bool (const StreamFrame &)> handler) |
信号
(自 Visindigo 0.17.0 引入) void | reconnecting(qint32 attempt, qint32 delayMs) |
详细说明
本类继承自 Visindigo::Network::HttpReply,因此状态机、进度、错误、中止与 生命周期绑定等能力全部复用,只额外提供按事件名或谓词分派的帧路由。
Note: 流式请求下 HttpReply::then 表示"流正常结束",而不是"取到了完整 内容"。事件应当通过 when 或 HttpReply::onFrame 消费。
另请参阅 Visindigo::Network::SSERequest and Visindigo::Network::HttpReply.
成员函数文档
[since Visindigo 0.17.0] QString SSEReply::getLastEventId() const
返回最近一次服务端给出的事件标识。断线后可用它作为 Visindigo::Network::SSERequest::setLastEventId() 的入参,从断点继续接收。
这个function 从 Visindigo 0.17.0 开始支持。
[signal, since Visindigo 0.17.0] void SSEReply::reconnecting(qint32 attempt, qint32 delayMs)
断线后正在等待重连。attempt 是第几次尝试,delayMs 是即将等待的毫秒数。
Note: 重连会带上最近的事件标识(Last-Event-ID)续传,但服务端并不保证一定 接受它。无法续传时这一段推送就是真的丢了,消费方不应假定事件连续。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] Visindigo::Network::SSEReply &SSEReply::when(const QString &eventName, std::function<bool (const StreamFrame &)> handler)
不带 context 的便利重载,等价于传入 nullptr。
Note: 此时连接的生命周期跟随句柄本身:句柄销毁时连接自动断开,因此不会 造成悬垂指针;但反过来说,句柄存活期间连接也一直存在。带捕获的表达式 建议改用带 context 的重载,以便宿主对象销毁时及时断开。
eventName 要监听的事件名。 handler 处理器,返回 false 表示中止整个流。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] Visindigo::Network::SSEReply &SSEReply::when(const QString &eventName, QObject *context, std::function<bool (const StreamFrame &)> handler)
按事件名注册处理器:只有 Event 与该名字相等的事件才会进入处理器。 同名事件会多次触发,处理器返回 false 表示中止整个流。
按事件名分派是 SSE 最自然的用法,因为服务端通常用它区分 message、\c ping、error 等不同种类的推送。
eventName 要监听的事件名。 context 接收回调的对象;传 nullptr 表示使用本对象。 handler 处理器,返回 false 表示中止整个流。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] Visindigo::Network::SSEReply &SSEReply::when(std::function<bool (const StreamFrame &)> predicate, QObject *context, std::function<bool (const StreamFrame &)> handler)
按谓词注册处理器,适用于不带 event 字段的流——很多服务端只发 data,此时无法按事件名分派,只能按内容特征判断。谓词返回 true 表示命中,随后调用处理器。
predicate 命中判定谓词,返回 true 表示该帧需要交给处理器。 context 接收回调的对象;传 nullptr 表示使用本对象。 handler 处理器,返回 false 表示中止整个流。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] Visindigo::Network::SSEReply &SSEReply::whenOnce(const QString &eventName, QObject *context, std::function<bool (const StreamFrame &)> handler)
与 when 相同,但只在首次命中时触发一次。适用于"只关心第一次出现的 某个事件"的场景,例如服务端在流开始时推送的一次性元信息。
eventName 要监听的事件名。 context 接收回调的对象;传 nullptr 表示使用本对象。 handler 处理器,返回 false 表示中止整个流。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] Visindigo::Network::SSEReply &SSEReply::whenOnce(std::function<bool (const StreamFrame &)> predicate, QObject *context, std::function<bool (const StreamFrame &)> handler)
谓词版的一次性处理器:首次命中 predicate 时触发一次,之后不再触发。 常用于“只关心出现的第一个数据帧”这类场景。
Note: “只触发一次”的判定建立在谓词命中之上,而不是建立在处理器返回 true 之上。 即使处理器返回 false(要求中止流),本处理器也不会再次被调用。
predicate 命中判定谓词。 context 接收回调的对象;传 nullptr 表示使用本对象。 handler 处理器,返回 false 表示中止整个流。
这个function 从 Visindigo 0.17.0 开始支持。