Sending message to a specific ID in Socket.IO 1.0

后端 未结 6 962
天命终不由人
天命终不由人 2020-11-30 18:01

I want to sent data to one specific socket ID.

We used to be able to do this in the older versions:

io.sockets.socket(socketid).emit(\'message\', \'         


        
相关标签:
6条回答
  • 2020-11-30 18:11

    If you have used a namespace I found that the following works :

    //Defining the namespace <br>
    var nsp = io.of('/my-namespace');
    
    //targeting the message to socket id <br>
    nsp.to(socket id of the intended recipient).emit('private message', 'hello');
    

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

    0 讨论(0)
  • 2020-11-30 18:14

    In socket.io 1.0 you can do that with following code:

    if (io.sockets.connected[socketid]) {
        io.sockets.connected[socketid].emit('message', 'for your eyes only');
    }
    

    Update:

    @MustafaDokumacı's answer contains a better solution.

    0 讨论(0)
  • 2020-11-30 18:15

    In socket.io 1.0 they provide a better way for this. Each socket automatically joins a default room by self id. Check documents: http://socket.io/docs/rooms-and-namespaces/#default-room

    So you can emit to a socket by id with following code:

    io.to(socketid).emit('message', 'for your eyes only');
    
    0 讨论(0)
  • 2020-11-30 18:22

    in Node.js --> socket.io --> there is a chat example to download Paste this in line (io on connection) part.. i use this code that works 100%

    io.on('connection', function(socket){
      socket.on('chat message', function(msg){
        console.log(socket.id);
        io.to(socket.id).emit('chat message', msg+' you ID is:'+socket.id);
      });
    });
    
    0 讨论(0)
  • 2020-11-30 18:26

    @Mustafa Dokumacı and @Curious already provided enough information, I am adding how you can get socket id.

    To get socket id use socket.id:

    var chat = io.of("/socket").on('connection',onSocketConnected);
    
    function onSocketConnected(socket){
       console.log("connected :"+socket.id);  
    }
    
    0 讨论(0)
  • 2020-11-30 18:30

    I believe both @Curious and @MustafaDokumacı provided solutions that work well. The difference though is that with @MustafaDokumacı's solution the message is broadcasted to a room and not only to a particular client.

    The difference is prominent when an acknowledgement is requested.

    io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});
    

    works as expected, while

    io.to(socketid).emit('message', 'for your eyes only', function(data) {...});
    

    fails with

    Error: Callbacks are not supported when broadcasting
    
    0 讨论(0)
提交回复
热议问题