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

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 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题