关于 websocket onmessage

websocket 接收到数据时,会触发 onmessage, 如果onmessage里面的程序还没执行完,又收到数据,会被打断重新执行吗?

阅读 21.1k
3 个回答

估计是多线程的。之前的肯定不会被打断,后面发来的可能会并行执行或等待上次的执行完毕才触发。


评论区的朋友看图:

clipboard.png

看见onmessage就认定是js,哪来的自信?


补充一下,js没有多线程,没有并行,那么第二个消息应该是等第一个onMessage回调执行完了,才会回调第二个消息的onMessage的。
一定不是丢掉第二个或者打断第一个。

不会的。
不过可能你的消息可能会被阻塞掉,具体看你的代码怎么写了。
你可以模拟一个服务端,让onmessage等待20秒再打印客户端发送的数据;然后在客户端发送两次不一样的数据,正常情况下,服务端会打印出两个不一样的消息的。

不知道你用的是哪个WebSocket库,不过我觉得基本应该是一样的。
onmessage事件是基于stream的,数据是一边获取一边消耗的,onmessage事件就相当于在消耗。在监听函数未执行完之前,数据获取可能会被阻塞(看具体实现),但同一个WebSocket的onmessage事件不会被触发。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进