Socket.io仅向发出请求的客户端发送数据

时间:2014-08-30 23:30:02

标签: node.js express socket.io timeout

我正在向所有客户发送数据,但我只需要向一个客户端(提出请求)发送数据。

app.post(.....){
  myModel.save(function (err) {
    if (err) return handleError(err);

    ///send to all
    io.sockets.emit("ev", { ...... });

    //// send to one client
    ...... 

 });
}

有一个名为io.sockets.emit的函数,但没有io.socket.emit

1 个答案:

答案 0 :(得分:3)

我假设你在post方法中确定了用户或会话。

因此,您可以为每个用户创建一个房间,以便稍后在其上发出。

<强> client.js

var room = "#usernameRoom";

socket.on('connect', function() {
   socket.emit('privateroom', room);
});

socket.on('privatemessage', function(data) {
   console.log('Incoming private message:', data);
});

<强> server.js

io.sockets.on('connection', function(socket) {
    var socket_room;

    socket.on('privateroom', function(room) {
        socket_room = room;
        socket.join(room);
    });

    socket.on('disconnect', function() {
        if (socket_room) {
            socket.leave(socket_room);
        }
    });
});


app.post(.....){
  myModel.save(function (err) {
    if (err) return handleError(err);

    ///send to all
    io.sockets.emit("ev", { ...... });

    //// send to one client

    // now, it's easy to send a message to just the clients in a given private room
    privateRoom = "#usernameRoom";
    io.sockets.in(privateRoom ).emit('privatemessage', 'Never reveal your identity!');

 });
}

希望有所帮助