关于 socket.io 消息丢失的问题

2016-07-14 09:52:22 +08:00
 a302800411

node.js+socket.io 运行在 localhost,客户端是 cocos2d-x 3.11 总共就运行了四个客户端,一个客户端广播消息后,服务器收到消息 broadcast 给其它三个客户端. 可是总会出现大概率的丢失消息,大概十次有五次会丢失消息. 这要是网络质量不好我也就不说什么了,虽说 scoket 是不可靠的连接,但运行在本地这个消息丢失率也太高了吧.. 各位能不能帮分析一下可能的原因

5180 次点击
所在节点    问与答
14 条回复
scys
2016-07-14 10:23:00 +08:00
感觉是因为逻辑原因问题,而且楼主,你起码给个演示代码,否则你想问啥?
现在我用 golang 的 websocket 没试过丢消息,可是链接会断,可是你 4 个客户端,就真心感觉是代码逻辑问题了。
a302800411
2016-07-14 10:34:36 +08:00
@scys 逻辑很简单...
// 客户端 1 发送消息
_sioClient->emit("serverController", buffer.GetString());
// 服务器收到消息并且广播(确定收到了消息 控制台打印出来了)
socket.on('serverController',
function (strJson) {
socket.broadcast.in (room).emit('clientController', strJson); //广播消息
});
// 客户端 2 3 4 有相同的监听器
void PlayingSence::clientController(cocos2d::network::SIOClient *client,const std::string& data){
//收到消息会打印出来
}
结果就是客户端 2,3,4 运气好的时候全部能收到消息..运气不好的时候只有一个能收到
scys
2016-07-14 10:43:43 +08:00
看看链接是不是断开了,如果代码如此简单,就只能是你的网络环境有问题。
a302800411
2016-07-14 12:14:01 +08:00
@scys 连接没断,网络是运行在本机啊,控制台打印了 connecting 和消息长度,然后就没然后了。。。 delegate 能不能收到完全靠缘分
laoyur
2016-07-14 12:18:09 +08:00
看楼主用的东西,干嘛不直接用 Pomelo ?当然好久没关注 Pomelo ,不晓得发展到啥情况了
morethansean
2016-07-14 12:19:04 +08:00
你的 socket 是走 udp 的?
a302800411
2016-07-14 13:52:34 +08:00
@morethansean 应该不是 udp...我查了一下 socket.io 大部分都是用的 websocket, 然后 websocket 走的是 tcp
现在很尴尬的是,客户端的日志文件里,可以收到心跳包,可以收到我广播的消息的 length,但是就是收不到消息内容...
我有点凌乱 不知道为什么了
ETiV
2016-07-14 14:44:23 +08:00
服务端和客户端协议不一样?
ETiV
2016-07-14 14:45:04 +08:00
客户端开 wireshark 或者 tcpdump 看吧……
morethansean
2016-07-14 17:17:54 +08:00
@a302800411 tcp 肯定是可靠的啊……
a302800411
2016-07-14 17:19:41 +08:00
@morethansean 所以我很迷..消息为什么丢失...丢失的毫无规律..
BOYPT
2016-07-14 17:26:57 +08:00
可能要抓包分析看看,这样看不出问题
a302800411
2016-07-16 17:36:56 +08:00
@scys
@morethansean
@ETiV
@BOYPT

我在 Cocos2d-x 的源码里打了断点,发现客户端是成功接收的,但是 在 throw 给 cocos thread 的后,就有一定概率丢失..
因为不是每次都必现,所以调试起来很头疼...
hatancb
2017-09-06 12:28:33 +08:00
@a302800411

楼主 node.js+socket.io 消息丢失问题后来怎么处理的
我们也碰到同样的问题了,消息会小概率丢失。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/292378

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX