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

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 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题