2015-09-28 51 views
3

是否socket.io忽略\放下它们? 我问这个问题的原因如下。 有几个州的客户。每个状态都有自己的一组套接字处理程序。在不同的时刻,服务器通知客户端状态变化,然后发送几个与状态相关的消息。 但是!客户需要一些时间来改变状态并设置新的处理程序。在这种情况下,客户端可能会错过一些消息......因为目前没有处理程序。 如果我理解正确,客户端会丢失未处理的消息。未处理的socket.io事件会发生什么?

可能是我错过了这个概念或做错了什么...如何解决这个问题?

回答

0

我不确定socket.io,但JavaScript是单线程的。如果触发event A并且有该事件的侦听器,则该侦听器将阻止事件循环。第二个事件(我们称之为event B)在该侦听器结束运行之前不能被触发。因此,如果您在侦听器中直接设置事件处理程序event A,则没有竞争条件。

4

未处理的消息被忽略。就像事件发生时那样,并且没有该事件的事件监听器。套接字收到消息,并没有找到它的处理程序,所以没有任何反应。

通过始终安装处理程序,然后决定处理程序(基于其他状态)是否对消息执行任何操作,可以避免丢失消息。

相关问题