Socket.io - 如何使用监听器

时间:2013-11-16 01:06:06

标签: node.js socket.io

我已经四处寻找关于这个问题的答案,我不确定我是否会以正确的方式解决这个问题。

我有一个node.js应用程序,它使用socket.io将数据从节点服务器推送到客户端。发送到nodejs的大多数请求都是通过HTTP请求,而推送到网站的数据是通过套接字接收的。

我目前为每个单独的侦听器都有唯一的命名空间(例如,我有一个带注释的Feed,这意味着我有 feed / {ID} 作为侦听器以及每个评论都有 评论/ {COMMENTID} 这意味着如果有25个Feed帖子,我会有26个(包括Feed)监听器单独的饲料。

我不完全确定socket.io如何通过侦听器推送数据(每个侦听器是一个新的套接字?)。在我看来,如果我在一个点上有大量用户和一个评论监听器,它会被无用的,无关的数据击中很多次 - 相比之下,它只接收与用户相关的数据。

设置监听器的最佳方法是什么?

或多或少听众有益吗?

2 个答案:

答案 0 :(得分:5)

这是一种使用监听器的坏方法。你应该只使用

  • socket.on( '进料',进料)
  • socket.on( '评论',注释)

如果要将数据发送到Feed侦听器,请使用“socket.emit('feed',{id:1})”。 如果要将数据发送到评论监听器,请使用“socket.emit('comment',{commentid:1})”

这会将你减少到只有2个听众。

答案 1 :(得分:4)

你应该使用Rooms来处理这个问题。每次用户查看订阅源页面时,它都会注册到一个房间,然后根据用户实际看到的页面将相关信息仅推送给用户。

socket.on('subscribe', function(data) { socket.join(data.room); }); socket.on('unsubscribe', function(data) { socket.leave(data.room); });

然后当您想要将信息发送到特定房间时

io.sockets.in('feed_1').emit('comment', data);

您可以在此处查看文档:{​​{3}}