Visindigo::Network::SseDecoder Class
class Visindigo::Network::SseDecoderSSE(W3C text/event-stream)流解码器. 详情...
| 头文件: | #include <Network/SSERequest.h> |
| 自以下版本: | Visindigo 0.17.0 |
| 继承自: | Visindigo::Network::IStreamDecoder |
重实现的公开成员函数
(自 Visindigo 0.17.0 引入) virtual QList<Visindigo::Network::StreamFrame> | feed(const QByteArray &chunk) override |
(自 Visindigo 0.17.0 引入) virtual QList<Visindigo::Network::StreamFrame> | finish() override |
(自 Visindigo 0.17.0 引入) virtual qint64 | getBufferedBytes() const override |
(自 Visindigo 0.17.0 引入) virtual qint64 | getMaxFrameBytes() const override |
(自 Visindigo 0.17.0 引入) virtual void | reset() override |
(自 Visindigo 0.17.0 引入) virtual void | setMaxFrameBytes(qint64 bytes) override |
详细说明
按 W3C 的 Server-Sent Events 规范把字节流切成事件帧:
- 以空行作为一次事件的结束标记;连续的空行不产生事件。
- 行结束符接受
LF、\cCR 与CRLF三种写法。 data字段可以出现多次,其值以换行连接;单个data行开头的 一个空格会被剥除。event字段给出事件名,缺省时事件名为空串。id字段更新最近一次事件标识,用于断线续传;含空字符的值按规范忽略。retry字段给出服务端建议的重连间隔(毫秒)。- 以冒号开头的行是注释,直接丢弃——它常用于保活心跳。
Note: 本实现不含任何厂商语义。诸如 "data: [DONE]" 这样的结束约定由上层 协议实现自行判断;这样做是为了让本模块对各家服务保持中立,厂家专属的 约定应当写在使用它们的地方,而不是沉到通用解码器里。
Note: 关于流结束(finish)时的行为,本实现对规范做了一处放宽:规范要求 丢弃尚未以空行结束的残余事件,而这里会把它补发出去。原因是一些服务端 在发出最后一个事件后直接断开,若严格丢弃就会丢掉末尾数据。
成员函数文档
[override virtual, since Visindigo 0.17.0] QList<Visindigo::Network::StreamFrame> SseDecoder::feed(const QByteArray &chunk)
Reimplements: IStreamDecoder::feed(const QByteArray &chunk).
送入新增字节并返回本次能够完整切出的事件帧。跨包的半个事件会被保留到 后续调用,因此调用方不必关心网络分包边界。
chunk 新到达的字节,其边界没有任何语义。
这个function 从 Visindigo 0.17.0 开始支持。
[override virtual, since Visindigo 0.17.0] QList<Visindigo::Network::StreamFrame> SseDecoder::finish()
Reimplements: IStreamDecoder::finish().
流结束时调用,补发尚未以空行结束的残余事件。详见类说明中的行为解释。
这个function 从 Visindigo 0.17.0 开始支持。
[override virtual, since Visindigo 0.17.0] qint64 SseDecoder::getBufferedBytes() const
Reimplements: IStreamDecoder::getBufferedBytes() const.
返回尚未构成完整事件的字节数。
这个function 从 Visindigo 0.17.0 开始支持。
[override virtual, since Visindigo 0.17.0] qint64 SseDecoder::getMaxFrameBytes() const
Reimplements: IStreamDecoder::getMaxFrameBytes() const.
返回当前的单帧缓冲上限。
这个function 从 Visindigo 0.17.0 开始支持。
[override virtual, since Visindigo 0.17.0] void SseDecoder::reset()
Reimplements: IStreamDecoder::reset().
清空缓冲与未完成的事件。重试或重定向后由中心调用。
这个function 从 Visindigo 0.17.0 开始支持。
[override virtual, since Visindigo 0.17.0] void SseDecoder::setMaxFrameBytes(qint64 bytes)
Reimplements: IStreamDecoder::setMaxFrameBytes(qint64 bytes).
设置单帧缓冲上限,默认 1 MiB。
bytes 单帧缓冲上限,单位为字节。
这个function 从 Visindigo 0.17.0 开始支持。