关于websocket中onmessage方法的回调频率

调试发现WEB环境下Websocket的onmessage回调的触发频率最小是200MS一次,假如后台的下发频率如果高于200MS一次,WEB下的onmessage也只会每200MS触发,但是可能会同时触发多次来追上后台的下发频率,有没有方法能提高WEB下200MS一次的触发频率?

另外论坛的发帖功能是不是有问题!?我标题都写了3、40个字了还告诉我 请描述得更详尽些 !?什么鬼!?

之前看过实现的代码里有相关的逻辑 他里面有主动sleep。所以会有很大的延迟 实现有问题

是不是你服务器发送数据的频率就是200ms?我按照50ms的频率发数据,客户端是可以按时收到的。另外检查下你服务器程序是不是经常挂起,一旦挂起,定时器就不准了

我尝试去翻了源码,但是没有找到相关的实现,我搜了一下源码,貌似只有一个Websocket.cpp,但是里面没有sleep或者200MS之类的东西,请问你是哪里看到的相关代码?

不是,我服务器下发是100MS一次,然后为了对比,我尝试改成了50毫秒一次,观察onmessage的触发频率,实际触发间隔依旧是200MS一次,但是!onmessage方法会在1-2毫秒内连续触发多次,以追上服务器的发送频率,结果就是每隔200MS,onmessage方法会触发2-3次,大致是这个情况,明显是websocket做了限制,但是我不知道是COCOS封装的websocket做的限制还是浏览器本身的websocket的固有限制

不建议用cocos原生socketio或websocket
建议自己写底层oc或java,用jsb调用
cocos自带的bug太多,版本太低

楼主问题解决了吗?onmessage方法会触发2-3次 怎么解决的呢

我今天也遇到这个问题。做帧同步的游戏。

本地搭建服务器测试的话,没有问题。

真实线上服务器就有问题。服务端是nodejs,环境window server 2008 r2 enterprise。
我每50ms间隔广播一次帧包。 但是浏览器里接收的话,是200ms一次,或者连续0-1ms接收几次,和楼主遇到的情况基本一致。目前也不知道怎么解决 = =!

你好,请问你解决了吗

没有 = =!

有可能是跟tcp scoket类似的问题,tcp在底层会等待一会儿,看有没有数据一起发送。所以做即时一点的,要设置TCP_NODELAY,相当立即发送

这么多年了居然这个问题还有人关注,我隐约记得当时解决了这个问题,但是确实想不起来是怎么解决的了,然后刚才特意去草草翻了当年的源码,当时貌似这个问题本身没有解决 是从策略层面上解决的,貌似逻辑是客户端分成了网络帧和本地的逻辑帧,每次onmessage都是网络帧+1,然后往事件池中添加要执行的事件,然后中间加了个平滑算法,本地的逻辑帧在运行的时候去消化事件池中的事件,就是解决思路是虽然onmessage本身是抖动的,但是本地强行把这个抖动拉平了,由于我的游戏虽然需要实时性较高,但并不是moba或者fps,这样的方案也能一定程度上解决真实情况下网络延迟带来的问题,最后的结果是完美能实现效果,希望能给你带来些思路

1赞

请看对另一个人的回复,看能否给你提供些思路

你好,请问怎么设置TCP_NODELAY,翻遍了websocket的api和源码,都没有看到哪里可以设置

你好,请问能加下好友吗,想请教一下你

我对websocket不熟,我只知道tcp会有这个问题,我的意思是你可以往类似这方面找找

你服务器是用什么写的?