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式,而不支持命名空间。
- nodejs JSON.parse(data_from_TCP_socket)
- NodeJS崩溃与多个请求
- 节点4.1.0 TLSSocket问题
- apr_socket_recv:通过对端重置的连接(104)nodejs Ubuntu 14.10 x64 8GB RAM 4核心(VPS)
- Node.js + Socket.io + Redis应用程序通过PM2大内存占用
- 在Node.js中打开多个UNIX域套接字:为什么我得到EAGAIN错误?
- socket.io使用for循环来添加socket.on方法
- socket.io给出了两个响应,但只有一个是被忽视的
- 我应该直接连接到CouchDB的套接字并传递HTTP请求或使用node.js作为代理?