【问题标题】:Forward all messages to socket.io room将所有消息转发到 socket.io room
【发布时间】:2015-06-10 00:23:10
【问题描述】:

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

目前在服务器上我要做的:

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

【问题讨论】:

  • 您能告诉我们您打算拥有多少种类型的消息吗? CRUD 还不够吗? (创建读取更新删除)
  • 是的,但除了食物之外。我正在将它重构为一个函数,该函数接受一个像“food”这样的字符串,但看起来还是有点难看

标签: javascript node.js socket.io


【解决方案1】:

这是 socket.io 文档页面上的示例,展示了如何使用事件和 key:value 数据集:

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 值做任何你想做的事情。

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    相关资源
    最近更新 更多