具有socket.io的单页应用程序中特定于部分的侦听器

我正在构build一个具有一些实时function的应用程序(通知,实时评论,…,当然还有经典的聊天室)。 它的结构是一个单一的页面应用程序。 我使用page.js来处理路由,require.js,现在还有一个简单的自定义mvc框架。 后端与节点和socket.io实时支持。

事情是,我有不同的部分,如家,post,聊天。 每个部分都是基于路由dynamic呈现的。 现在,我应该如何为每个部分绑定特定的套接字事件? 我不想听那些与当前观看部分无关的事件。 我应该每次创build一个新的连接用户更改该部分,目标不同的命名空间? 或者我应该删除套接字中的所有事件侦听器,并附加一组新的事件? 我不知道什么是最好的方法,或者如果socket.io是最好的select。

谢谢。

哇。 我发现这个问题在谷歌,我意识到我从来没有发布我的解决scheme。

感谢这个答案 ,我解决了使用房间而不是命名空间。 所以当用户更改这些部分时,socket会发出一个“changeSection”事件。 在服务器端,我离开相应的旧部分的房间,并join新的部分:

 io.sockets.on('connection', function (socket){ socket.on('changeSection', function (section){ // Leave all previous rooms for (var room in io.sockets.manager.roomClients[socket.id]) socket.leave(room.slice(1)); // Join new socket.join(section); }); }); 

然后,我发送特定于部分的事件(如通知,新评论,聊天消息)到相应的房间。