流式消息
本文介绍如何在 Flutter IMLib SDK 中接收并拉取流式消息,涵盖消息监听、拉取流程、事件回调与摘要获取等内容。
提示
此功能从 5.32.0 版本开始支持。
流式消息简介
流式消息由业务服务器触发,融云 IM 服务器会以多次推送的形式将数据片段下发到客户端。客户端首先通过 onMessageReceived 收到一条 RCIMIWStreamMessage,再调用 requestStreamMessageContent 拉取完整内容,并通过流式事件监听器按 init > data > complete 顺序获取生成过程。
警告
Flutter SDK 仅负责接收和拉取流式消息,不提供发送流式消息的接口。
下图展示了完整的交互流程:
RCIMIWStreamMessage 继承自 RCIMIWMessage,关键字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
content | String? | 首包携带的流式内容片段 |
type | String? | 服务器自定义的文本格式描述,例如 text/plain |
complete | bool? | 是否已生成完毕 |
sync | bool? | 客户端是否已完成完整拉取,false 时需主动调用 requestStreamMessageContent |
completeReason | int? | 业务侧定义的结束原因码 |
stopReason | int? | 服务器定义的结束原因,0 代表正常结束 |
接收流式消息
SDK 不支持发送流式消息,需要由服务器触发。当收到流式消息时,可在 onMessageReceived 回调中判断消息类型,并根据 sync 字段决定是否发起拉取:
Dart
engine?.onMessageReceived = (RCIMIWMessage? message, int? left, bool? offline, bool? hasPackage) {
if (message?.content is RCIMIWStreamMessage) {
final streamMsg = message!.content as RCIMIWStreamMessage;
if (streamMsg.sync == false) {
debugPrint('收到流式消息 ${message.messageUId},需要继续拉取');
} else {
debugPrint('流式消息已同步完成,无需重复拉取');
}
}
};
历史流式消息
SDK 接收到流式消息后,会存储到本地数据库。开发者在调用获取历史消息相关接口时,可以查询到流式消息。