发现socket.io一个疑似BUG的坑和对应解决办法(测试版本2.1.1)
我发现在一些特殊情况下,在disconnect里的emit如果对方已经下线会立刻执行disconnect事件,而不是当前函数执行完毕后才执行,从而导致BUG。
测试方法是,先连上2个或以上客户端,然后一个客户端发送一个消息(如果第一个连上的客户端不会触发BUG就换第二个连上的客户端),在服务端断点那个消息,在这时同时关闭这些客户端,接着在disconnect设置断点,当这个消息函数执行完毕后,会来到disconnect,接着就是如截图GIF中的场景,当emit的对方已经下线时,立刻执行了disconnect从而引发了BUG。
解决办法是在disconnect里用process.nextTick()来执行,这样就能避免立刻执行disconnec导致的BUG,并且不排除在disconnec以外的地方也发生这种现象的可能。
如果认为这个是BUG,可以去作者的GITHUB反应,不过我英文不行就算了,而且反正有自己的解决办法了。只不过这个现象可能会坑大多不知道的人。