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

Visindigo::Network::SseDecoder Class

class Visindigo::Network::SseDecoder

SSE(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、\c CR 与 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 开始支持。