Socket.io客户端事件侦听器在服务器重新启动并重新连接后不侦听
Socket.io客户端很好地工作,直到服务器断开/重新启动。
一旦服务器恢复正常,它就会重新连接,但是当发生事件时,我的所有客户端监听器都不再触发。
网上似乎没有很多,但从我迄今为止阅读的内容来看,这里是我试过的:
-
将所有.on监听器包装在一个函数中,然后每次客户端库重新连接/连接时调用该函数。
-
把我所有的io实例包装在一个函数中,每次我调用它时都会返回一个新的实例。
-
跟踪服务器上的所有房间,然后重新连接所有房间。
-
创buildio实例时将'multiplex'设置为false。
这些事情都没有给我带来好运。
这里是最相关的github问题,没有答案: https : //github.com/socketio/socket.io/issues/1633
看起来,因为我的客户端上有所有的房间名称,所以我可以在不使用Redis之类的情况下重新连接这些房间。 谢谢。
更新:经过一天的尝试许多不同的策略,似乎为每个命名空间创build.on('连接',Fn)侦听器将使客户端和服务器重新正确连接
io.of('namespace').on('connection', function(){ console.log("namespace connected") });
如果你没有这个,socket.io仍然可以正常工作和连接,但是它不会与正在工作的客户端监听器重新连接。
我想这应该是在图书馆更新的东西。
无论如何,关于我的特殊问题,我仍然留下一个问题:
我需要能够处理dynamic命名空间
io.of('namespace-<id>').on('connection', function(){ console.log("namespace id: <id> connected") });
如果我有通配符支持,比如
io.of('namespace-*').on('connection', function(){ console.log("namespace id: <id> connected") });
完全适合我的情况。 我浏览过不同的图书馆,例如:
https://www.npmjs.com/package/socket.io-events
但它只支持事件的通配符和正则expression式,而不支持命名空间。