将所有消息转发到socket.io room

时间:2015-06-09 12:51:08

标签: javascript node.js socket.io

如果客户向房间发送消息,我该如何将该消息发送给房间内的所有其他客户?

目前我必须在服务器上执行:

    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是否提供了一种方法,将一个客户端的所有消息自动转发到该房间中的所有其他客户端?

1 个答案:

答案 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值执行任何操作。

相关问题