我已经四处寻找关于这个问题的答案,我不确定我是否会以正确的方式解决这个问题。
我有一个node.js应用程序,它使用socket.io将数据从节点服务器推送到客户端。发送到nodejs的大多数请求都是通过HTTP请求,而推送到网站的数据是通过套接字接收的。
我目前为每个单独的侦听器都有唯一的命名空间(例如,我有一个带注释的Feed,这意味着我有 feed / {ID} 作为侦听器以及每个评论都有 评论/ {COMMENTID} 。这意味着如果有25个Feed帖子,我会有26个(包括Feed)监听器单独的饲料。
我不完全确定socket.io如何通过侦听器推送数据(每个侦听器是一个新的套接字?)。在我看来,如果我在一个点上有大量用户和一个评论监听器,它会被无用的,无关的数据击中很多次 - 相比之下,它只接收与用户相关的数据。
设置监听器的最佳方法是什么?
或多或少听众有益吗?
答案 0 :(得分:5)
这是一种使用监听器的坏方法。你应该只使用
如果要将数据发送到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}}