javascript - Socket.io:发出消息是否将所有数据发送到所有客户端?

标签 javascript node.js socket.io

问题旨在了解 socket.io 的工作原理。

如果我有一个带有多个客户端的服务器和以下函数(伪代码):

// Server-side
socket.emit('data-request', { some large object });

服务器是将大数据对象发送给每个客户端还是仅发送给具有相应(功能/事件)的客户端?

socket.on('data-request', function(data){blah blah blah});

最佳答案

不,你在那里做的事情会向连接到服务器的每个套接字发送一条消息,除了socket套接字,如果你想的话广播到你会做的特定房间

 io.sockets.in('some room name').broadcast('some data')

如果你想广播给特定房间里除了发件人以外的所有人,如果发件人在那个房间里你会这样做

 socket.broadcast.to('some room name').emit('some data');

虽然首先您可能需要创建一些房间,在这种情况下您只需要做

someSocket.join('some room name')

也许这样的事情可以帮助你。

io.sockets.on('connection', function (socket) {
   // let everyone know i'm here
   socket.broadcast.emit('user connected');

   socket.on('join-data-request-room', function(){
       socket.join('data-request-room')
   })
});

现在你可以这样做了

 io.sockets.in('data-request-room').broadcast('new data')

它会发送给那个房间里的每个人,目前那个房间里没有人,要添加那个房间里的人,你可以在客户端(浏览器)上做这样的事情。

 io.emit('join-data-request-room')

现在并且只有现在那个“客户”会在房间data-request-room

我已经几个月没有使用 socket.io,所以可能有一些我不知道的更好的方法。

关于javascript - Socket.io:发出消息是否将所有数据发送到所有客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23066474/

相关文章:

node.js - 确定 socket.io 是 TCP 还是 HTTP

javascript - ASP CustomValidator,错误后前进到回发

javascript - AngularJS - ngRoute 否则无法正常工作

javascript - 调用 web3.eth.personal.unlockAccount 会抛出错误

node.js - 捕获 Promise、Observable.fromPromise() 和订阅中的错误

node.js - 无法使用express js在mongodb中一次$push和$set数据

javascript - Socket.io 每次发射都失败

javascript - 在我的案例中,哪种显示动态单选按钮的方法更好?

javascript - NextTick() 不起作用 [将 CPU 密集型任务与其他事件交错]

node.js - 发出 socket.io 和 sailsjs (Twitter API)