하나의 특정 소켓 ID로 데이터를 보내고 싶습니다.
이전 버전에서이 작업을 수행 할 수있었습니다.
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Socket.IO 1.0에서 비슷한 작업을 수행하려면 어떻게해야합니까?
하나의 특정 소켓 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ı의 답변에는 더 나은 솔루션이 포함되어 있습니다.
네임 스페이스를 사용한 경우 다음이 작동하는 것으로 나타났습니다.
//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);
});
});