node.js+socket.io 运行在 localhost,客户端是 cocos2d-x 3.11 总共就运行了四个客户端,一个客户端广播消息后,服务器收到消息 broadcast 给其它三个客户端. 可是总会出现大概率的丢失消息,大概十次有五次会丢失消息. 这要是网络质量不好我也就不说什么了,虽说 scoket 是不可靠的连接,但运行在本地这个消息丢失率也太高了吧.. 各位能不能帮分析一下可能的原因
1
scys 2016-07-14 10:23:00 +08:00
感觉是因为逻辑原因问题,而且楼主,你起码给个演示代码,否则你想问啥?
现在我用 golang 的 websocket 没试过丢消息,可是链接会断,可是你 4 个客户端,就真心感觉是代码逻辑问题了。 |
2
a302800411 OP @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 运气好的时候全部能收到消息..运气不好的时候只有一个能收到 |
3
scys 2016-07-14 10:43:43 +08:00
看看链接是不是断开了,如果代码如此简单,就只能是你的网络环境有问题。
|
4
a302800411 OP @scys 连接没断,网络是运行在本机啊,控制台打印了 connecting 和消息长度,然后就没然后了。。。 delegate 能不能收到完全靠缘分
|
5
laoyur 2016-07-14 12:18:09 +08:00
看楼主用的东西,干嘛不直接用 Pomelo ?当然好久没关注 Pomelo ,不晓得发展到啥情况了
|
6
morethansean 2016-07-14 12:19:04 +08:00
你的 socket 是走 udp 的?
|
7
a302800411 OP @morethansean 应该不是 udp...我查了一下 socket.io 大部分都是用的 websocket, 然后 websocket 走的是 tcp
现在很尴尬的是,客户端的日志文件里,可以收到心跳包,可以收到我广播的消息的 length,但是就是收不到消息内容... 我有点凌乱 不知道为什么了 |
8
ETiV 2016-07-14 14:44:23 +08:00 via iPhone
服务端和客户端协议不一样?
|
9
ETiV 2016-07-14 14:45:04 +08:00 via iPhone
客户端开 wireshark 或者 tcpdump 看吧……
|
10
morethansean 2016-07-14 17:17:54 +08:00
@a302800411 tcp 肯定是可靠的啊……
|
11
a302800411 OP @morethansean 所以我很迷..消息为什么丢失...丢失的毫无规律..
|
12
BOYPT 2016-07-14 17:26:57 +08:00
可能要抓包分析看看,这样看不出问题
|
13
a302800411 OP @scys
@morethansean @ETiV @BOYPT 我在 Cocos2d-x 的源码里打了断点,发现客户端是成功接收的,但是 在 throw 给 cocos thread 的后,就有一定概率丢失.. 因为不是每次都必现,所以调试起来很头疼... |
14
hatancb 2017-09-06 12:28:33 +08:00
|