botframework - 使用 await context.PostAsync(reply) 发送多条消息时,有时会乱序接收
问题描述
当我们使用 Directline 通道使用以下代码发送消息时,有时会收到消息并交换它们的顺序。
await context.PostAsync(msg1);
await context.PostAsync(msg2);
预期的:
mgs1
味精2
但在某些情况下,它们会通过
消息 2 消息
1
有没有办法处理和防止这种情况?
解决方案
假设您使用 Directline 或 REST API 接收消息,我将编写此答案。如果不是这样,我可以更新。
整个答案基于来自机器人文档的接收活动以及对 Directline API 进行一些测试以确认。
如果您是通过 WebSocket 连接的,那么您应该始终按顺序接收消息,前提是消息中没有某种需要额外处理的大小差异(例如有附件)。
如果不是,则通过轮询间隔检索消息,这意味着您的客户端可能每 5 或 10 秒(因客户端而异)发送一个 GET 请求以检索所有尚未检索的消息。
这样做后,客户端将收到如下信息:
{
"activities": [
{
"type": "message",
"channelId": "directline",
"conversation": {
"id": "abc123"
},
"id": "abc123|0000",
"from": {
"id": "user1"
},
"text": "hello"
},
{
"type": "message",
"channelId": "directline",
"conversation": {
"id": "abc123"
},
"id": "abc123|0001",
"from": {
"id": "bot1"
},
"text": "Nice to see you, user1!"
}
],
"watermark": "0001a-95"
}
我的猜测是您的客户只是foreach
在一系列活动上运行,这可能会乱序显示它们。如果您让客户通过timestamp
或订购它们id
,它应该可以工作。
推荐阅读
- c++ - Alt + Space 不适用于无边框窗口
- r - geom_path() 散点图 ggplot2
- python - 如何优化嵌套 if 语句?我不能在这里使用 &&
- django - 是否有任何选项可以在 pycharm 中使用 django 索引 mongodb
- python - Django 会话密钥获取或创建
- javascript - 在浏览器中使用 Handlebars 作为 ES6 模块
- nestjs - 错误不能在模块外使用导入语句
- javascript - 如何使用 onChange 方法更新数组中的对象
- javascript - React 状态更新只更新一个元素
- tcl - 如何在 TCL 中求和坐标