Socket.IO 1.0의 특정 ID로 메시지 보내기


85

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

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

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

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

답변:


206

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

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

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

to (room_id)와 (user_socket_id) 사이에 차이가 있습니까? 실제로 한 명 이상의 사용자가있을 수있는 방에 메시지를 보내는 데 사용합니다. "이렇게하면 메시지를 다른 소켓으로 쉽게 브로드 캐스트 할 수 있습니다."그러면 고유 한 개인 소켓이 아닌 하나 이상이 될 수 있습니다.
Washington Botelho 2014 년

@WashingtonBotelho, 소켓 ID는 일반적으로 "Uj5CRqZ5b_Xubx9sAAAA"와 유사하므로 이론적으로는 이러한 방에 두 명 이상의 사용자가있을 수 있지만 실제로는 다른 사용자의 개인 방에 사용자를 추가 할 경우 어떤 경우에도 알 수 없습니다.
올렉

9
특정 사용자를 socketId로 어떻게 식별 할 수 있습니까? 이것은 사용자 (예 : 사용자 이름) 및 socketId의 키 값 쌍을 어딘가에 저장해야 함을 의미합니까?
Sai

@Mustafa Dokumacı의 merhaba, 바나 BIR yardim 등 stackoverflow.com/questions/38817680/...
pishguy 마흐디

너무 비논리적입니다. 소켓 ID 번호로 메시지를 보내는 방법을 제공하지 않는 이유는 무엇입니까? 어쨌든 upvoted, 그 주변에있는 유일한 작품은 실제로 2.X에서 작동
Adry

94

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

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

최신 정보:

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


3
이 답변과 지적 된 더 나은 답변의 차이점은이 솔루션을 사용하면 좋은 콜백을 가질 수 있다는 것입니다. 그러나 io.to (socketid)에서는 콜백을 사용할 수 없습니다.
Ramazan Polat 2016 년

17

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

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

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

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

6

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

//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/


5

@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

1

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);
  });
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.