[socket.io] Socket.IO 1.0의 특정 ID로 메시지 보내기

하나의 특정 소켓 ID로 데이터를 보내고 싶습니다.

이전 버전에서이 작업을 수행 할 수있었습니다.

io.sockets.socket(socketid).emit('message', 'for your eyes only');

Socket.IO 1.0에서 비슷한 작업을 수행하려면 어떻게해야합니까?



답변

socket.io 1.0에서는 더 나은 방법을 제공합니다. 각 소켓은 자체 ID로 기본 방에 자동으로 참여합니다. 문서 확인 : http://socket.io/docs/rooms-and-namespaces/#default-room

따라서 다음 코드를 사용하여 id로 소켓에 내보낼 수 있습니다.

io.to(socketid).emit('message', 'for your eyes only');


답변

socket.io 1.0에서는 다음 코드로이를 수행 할 수 있습니다.

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

최신 정보:

@ MustafaDokumacı의 답변에는 더 나은 솔루션이 포함되어 있습니다.


답변

@Mustafa Dokumacı와 @Curious는 이미 충분한 정보를 제공했으며 소켓 ID를 얻는 방법을 추가하고 있습니다.

소켓 ID를 얻으려면 socket.id를 사용 하십시오 .

var chat = io.of("/socket").on('connection',onSocketConnected);

function onSocketConnected(socket){
   console.log("connected :"+socket.id);
}


답변

네임 스페이스를 사용한 경우 다음이 작동하는 것으로 나타났습니다.

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

네임 스페이스에 대한 추가 정보 :
http://socket.io/docs/rooms-and-namespaces/


답변

@Curious와 @ MustafaDokumacı 모두 잘 작동하는 솔루션을 제공했다고 생각합니다. 그러나 차이점은 @ MustafaDokumacı의 솔루션을 사용하면 메시지가 특정 클라이언트뿐만 아니라 방으로 방송된다는 것입니다.

그 차이는 승인이 요청 될 때 두드러집니다.

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

예상대로 작동하지만

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

실패하다

Error: Callbacks are not supported when broadcasting


답변

Node.js-> socket.io-> 다운로드하는 채팅 예제가 있습니다. Paste in line (io on connection) 부분 .. 나는 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);
  });
});


답변