Socket.io 1.0中间件加入空间不能正常工作

时间:2014-07-24 09:32:27

标签: node.js join socket.io middleware

我试图在一个中间件的某些房间添加新的套接字,但是当一个套接字(客户端)的第一个放弃避风港时它似乎无法正常工作。当套接字(客户端)发送'消息时,然后它会工作并成为房间的一部分。
这是正常的行为吗? 我是否必须加入“连接”空间?事件

app.js(服务器端)

var app = require('http').createServer(function (req, res){
  res.end('no rest');
});

var io = require('socket.io')(app);
app.listen(7076);


io.use(function(socket, next){
  socket.join('toto');
  next();
});

io.on('connection', function (socket) {
  socket.on('message', function (data) {
    socket.to('toto').emit('message', data);
  });
});

2 个答案:

答案 0 :(得分:3)

根据documentationsocket.to('toto').emit...语法不正确。您应该使用以下形式之一:

向所有人发送" toto"室:

io.to('toto').emit('message', data);

向所有人发送" toto"除发件人外的房间:

socket.broadcast.to('toto').emit('message', data);

答案 1 :(得分:0)

事实上,问题根本没在服务器端......我的客户端我没有描述。 当点击按钮发送消息时,这个函数叫做

function messageManagement(cb)
    {
        var message = $('#message_text').val();
        if (!message || message.length == 0)
            message = 'I am watching you';
        socketClient.emit('message', {message:message});
        socketClient.on('message', function (data){
            console.log(data.messsage);
            drawMessage(data);
        });
    }

正如您在每次客户端发出消息时所看到的那样,它也会注册到响应事件。因此,每当我发出一条消息时,再注册一次同一事件......这很混乱,所以我改变了它并且它有效..