【问题标题】:socket.io dynamic send and revice messagessocket.io 动态发送和接收消息
【发布时间】:2014-09-05 00:35:01
【问题描述】:

我如何向动态房间发送消息,以及当服务器收到该消息时,将该消息发送到同一个房间以供其他成员使用?

table_id是房间,会动态设置..

客户:

var table_id = 1; // example, python will give this value

var socket = io('http://localhost:3000');
socket.on('connect', function() {
    console.log('Connected');
    socket.emit('join', "table_"+table_id);
});

socket.on("table_"+table_id, function(data) {
   console.log('New data:', data);
});

$('button').on('click', function(){
    // send message to that room
});

服务器:

io.on('connection', function(socket){

  socket.on('join', function(table) {
    console.log('joined to table '+table);
    socket.join(table);
  });

  // when receive message from particular room, send it back to others in same room

});

【问题讨论】:

    标签: sockets websocket socket.io


    【解决方案1】:

    也许您需要命名空间,而不是房间。 您可以在一个命名空间中为该房间的所有成员广播事件。

    http://socket.io/docs/rooms-and-namespaces/

    但如果你想做经典的聊天消息,只需将消息广播到整个房间:

    io.to('some room').emit('some event');
    

    例如:

    io.on('connection', function(socket){
        socket.on('join', function(table) {
            console.log('joined to table '+table);
            socket._room = table
            socket.join(table);
        });
        // when receive message from particular room, send it back to others in same room
        socket.on('message', function(message) {
            io.to(socket._room).emit('some event',message);
        });
    });
    

    和客户端:

    $('button').on('click', function(){
        // send message to that room
        socket.emit('message', $('.message').val());
    });
    

    【讨论】:

    • 谢谢,这很好用.. 但是我为什么要在这里使用命名空间,有动态空间呢?你能给我举个命名空间的例子吗?
    • 有一个样本,不如房间好,但它适用于其他情况:gist.github.com/ramainen/3c738641fc7fbe3ca6fc
    • 因此,命名空间适用于您的表* 执行不同操作的情况。例如,table_messages 和 table_tasks。
    • 最后一件事:现在 socket.io 在最后一个用户断开连接后不会删除房间,这是一个错误。在大型项目中,您可能必须手动删除房间,因为内存问题。
    • 没有人在的情况下如何删除房间?
    猜你喜欢
    • 2015-04-06
    • 2015-01-16
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2016-04-08
    相关资源
    最近更新 更多