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

时间:2013-09-02 04:07:06

标签: javascript node.js socket.io requirejs single-page-application

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

哇。我在谷歌找到了这个问题,我意识到我从未发布过我的解决方案。

感谢this answer,我解决了使用会议室而不是名称空间的问题。因此,当用户更改部分时,套接字会发出" 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);
  });
});

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