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

Section-specific listeners in single page app with socket.io

本文关键字:定部 侦听器 应用程序 socket io 单页 带有      更新时间:2023-09-26

我正在构建一个具有一些实时功能的应用程序(通知、实时评论……当然还有经典聊天室)。它的结构是一个单页应用程序。我正在使用page.js来处理路由、require.js,目前还有一个简单的自定义mvc框架。使用node和socket.io进行后端实时支持。

问题是,我有不同的部分,比如家,帖子,聊天。每个部分都会根据路线进行动态渲染。现在,我应该如何为每个部分绑定特定的套接字事件?我不想听与当前查看部分无关的事件。每次用户更改节时,我是否应该创建一个新的连接,以不同的命名空间为目标?还是应该删除套接字中的所有事件侦听器,并附加一组新的事件?我不知道什么是最好的方法,也不知道socket.io是否是最好的选择。

谢谢。

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

多亏了这个答案,我解决了使用文件室而不是名称空间的问题。因此,当用户更改节时,socket会发出一个"changeSection"事件。在服务器端,我离开了与旧部分相对应的房间,加入了新的部分:

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);
  });
});

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