好好上班懂吗 2022-04-03 05:44 采纳率: 75%
浏览 328
已结题

c# 客户端接受websokcet服务器的消息并作出应答的逻辑问题

我使用websocket-sharp 连接了socket服务器,并将来回应答的逻辑代码都写在了OnMessage里面,如图:

img

在我标记的地方,正常情况下服务器会返回消息A,我判断是消息A,就去做处理。但是现在有一种特殊情况,服务器除了回复我消息A,还会紧跟着发过来一条消息B,这种情况我需要做另一种处理。但是我目前的逻辑好像处理不了这种情况。socket消息如下图:
第一种情况

img

第二种情况

img

现在就是当消息A进到这里的时候,我不能直接就去处理,需要判断是否后面还有消息B,我不知道如何实现这个逻辑。因为两条消息不是一起过来的,如果合并为一条消息过来就很好办。但是现在消息A和B会依次进到这里,A过来的时候程序不能往下走,要等待 判断会不会有B第二次进到这里。我的想法是当消息A进来的时候,让程序等待,比如50ms,如果有消息B进来就是第二种情况,否则就是第一种情况。或者将消息A以及后面50ms的消息都先记录下来,后面一起判断,含有B就是第二种情况,不含就是第一种。但是我都不知道该如何实现。

  • 写回答

16条回答 默认 最新

  • 急速光粒 2022-04-03 18:03
    关注

    onmessage中增加对A和A+B的处理逻辑,如果是A,则看前一个A消息记录是否处理,如果未处理立刻处理并清空前一个A记录,本次A则先不处理但是存储下来(作为下一次消息的前一个A消息记录),并启动一个定时器(如100ms),在定时器中进行消息A的处理并清除A消息;如果是B,则将之前消息A取出与B形成A+B进行处理,并将A消息存储清空。这样就可以实现对消息的A+B的即时处理和独立消息A的延后处理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(15条)

报告相同问题?

问题事件

  • 系统已结题 4月16日
  • 已采纳回答 4月8日
  • 创建了问题 4月3日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵