Sending message to a specific ID in Socket.IO 1.0

▼魔方 西西 提交于 2019-12-17 10:08:48

问题


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', 'for your eyes only');

How would I go about doing something similar in Socket.IO 1.0?


回答1:


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');



回答2:


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.




回答3:


@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);  
}



回答4:


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/




回答5:


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



回答6:


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);
  });
});


来源:https://stackoverflow.com/questions/24041220/sending-message-to-a-specific-id-in-socket-io-1-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!