如果客户向房间发送消息,我该如何将该消息发送给房间内的所有其他客户?
目前我必须在服务器上执行:
io.on('connection', function (socket) {
socket.on('join', function (room) {
socket.join(room);
socket.on('food.create', function (foods) {
socket.broadcast.to(room).emit('food.create', foods);
});
socket.on('food.update', function (foods) {
socket.broadcast.to(room).emit('food.update', foods);
});
socket.on('food.remove', function (foods) {
socket.broadcast.to(room).emit('food.remove', foods);
});
});
});
io.listen(3000);
现在哪个好,只有3条消息,但是当我添加更多消息时,它会变长。 socket.io是否提供了一种方法,将一个客户端的所有消息自动转发到该房间中的所有其他客户端?
答案 0 :(得分:0)
这是关于socket.io docs页面的示例,它显示了如何使用事件和键:数据的值集:
var io = require('socket.io')();
io.on('connection', function(socket){
socket.emit('an event', { some: 'data' });
});
为什么不使用这个构造来传递消息?将您的数据与您希望相应客户端使用该数据作为关键字:值集的数据放在数据对象中。像这样:
io.to('your_room').emit('food', { todo: 'delete', name: 'macaroni' });
});
然后,服务器可以简单地将该事件广播到房间中的所有其他客户端。这样您根本不必过滤服务器上的消息。
其他客户端然后接收消息并根据data.todo和data.name值执行任何操作。