Socket.io客户端事件侦听器在服务器重新启动并重新连接后不侦听

Socket.io客户端很好地工作,直到服务器断开/重新启动。

一旦服务器恢复正常,它就会重新连接,但是当发生事件时,我的所有客户端监听器都不再触发。

网上似乎没有很多,但从我迄今为止阅读的内容来看,这里是我试过的:

  1. 将所有.on监听器包装在一个函数中,然后每次客户端库重新连接/连接时调用该函数。

  2. 把我所有的io实例包装在一个函数中,每次我调用它时都会返回一个新的实例。

  3. 跟踪服务器上的所有房间,然后重新连接所有房间。

  4. 创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式,而不支持命名空间。