[求助]node.js开发问题:两人对战时较大概率出现数据丢包
发布于 6 年前 作者 suckmoney 3875 次浏览 来自 问答

我们开发的微信小程序是两个人答题对战然后晋级或淘汰的。

就是两个人对战的时候会出现数据丢包的问题,造成其中一方收不到题。

微信开发平台是node.js的,问题是: 通过websocket和后台的node.js进行通讯,会出现: 1.客户端可能收不到,但服务端却认定收到了。 2.客户端收到数据时,收到的顺序是反的(服务端发a、b两次数据,客户端收到b、a)

求诸位贤达解答,若能解决问题,不胜感激,酬谢不敢免。

10 回复

客户端收到后,发回一条消息告诉服务端收到了

@dislido 就像服务端和客户端微信聊天一样反复确认是吧? 一是时限比较短,二是太耗带宽。所以想着看有没更好的办法。 咨询了不少人,有的说是TCP通讯粘包拆包的问题没解决好,但是关键是不知道怎么解决,有的说是node异步通讯的逻辑没处理好,但也是不知道怎么解决。唉。。。

发消息走http,收消息走websocket, 。socket.io有消息回调,即发送后有个回调函数来确认接收方结果

来自酷炫的 CNodeMD

由客户端主动emit消息去后端取数据, 这个是有回调的可以判断成功失败 后端仅广播消息通知各客户端取数据 你的具体业务场景不是很清楚

我记得websocket处理过粘包啊

@suckmoney 客户端只有返回确认报文才能肯定包送达啊;包顺序反的问题你确定你发送的顺序是对的,建议你通过 抓包 来分析一下是客户端问题还是服务端问题

From Noder

@JustinLiao1314 打印过日志,确定发送的顺序是对的。 现在怀疑是TCP通讯产生的粘包造成的无法正确解析和拆包造成的识别顺序的问题,正在各种调试。如果有这门类的大神就好了。 非常感谢提供意见。

@243011068 兄台,确定微信开发者的SDK里已经有解决粘包的方式吗?能否进一步说明?费心了,非常感谢。

@yinxin630 具体业务场景就是两个用户答题实时对战,服务端给双方发同一题,双方在限时内选择答案进行答题。和头脑王者有点类似。 非常感谢

@zswnew 先试试看 感谢帮助

回到顶部