socket.emit () 대 socket.send ()


133

이 둘의 차이점은 무엇입니까?

작동하는 프로그램 에서 socket.emit로 변경 socket.send하면 서버가 메시지를 수신하지 못했지만 그 이유를 이해할 수 없었습니다.

또한 프로그램에서 socket.emit로 변경 socket.send하면 서버가 메시지를 수신하지만 여러 번 수신하는 것으로 나타났습니다 . console.log()서버가 무엇을 받았는지 볼 때 사용 하면 서버와 다른 것을 표시합니다 socket.emit.

왜 이런 행동? 언제 사용 socket.emit할지 또는 socket.send어떻게 알 수 있습니까?

답변:


123

socket.emit을 사용하면 다음과 같이 사용자 정의 이벤트를 등록 할 수 있습니다.

섬기는 사람:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

고객:

var socket = io.connect('http://localhost');
socket.on('news', function (data) {
  console.log(data);
  socket.emit('my other event', { my: 'data' });
});

Socket.send는 동일하지만 'news'에 등록하지 않고 메시지에 등록합니다.

섬기는 사람:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.send('hi');
});

고객:

var socket = io.connect('http://localhost');
socket.on('message', function (message) {
  console.log(message);
});

3
큰 차이는 아닌 것 같습니다. socket.emit ()이 socket.on ()이 할 수있는 모든 것을 할 수있는 것처럼 보입니다. 그들은 왜 그 기능을해야 했습니까?
노드 닌자

2
모르겠습니다. 소스 코드를 확인했으며 거의 ​​동일합니다 ( github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L318 ). 어쩌면 과거와의 호환성을 위해서 일 수도 있습니다.
Charles

37
또한이 게시물의 미래 독자는 node.js TCP, UDP 또는 Unix 소켓이 아니라 socket.io에 관한 것임을 명심하십시오.
aredridel

3
바닐라 자바 ​​스크립트 웹 소켓으로 방출 할 수 있습니까?
Alex Buznik

11
외모처럼 socket.send단순히 별칭입니다socket.emit('message', message);
Mohit Gangrade

92

간단하고 정확한 (출처 : Socket.IO google group ) :

socket.emit 서버 및 클라이언트에서 사용자 정의 이벤트를 생성 할 수 있습니다

socket.send'message'이벤트 와 함께 수신 된 메시지를 보냅니다.


45

TL; DR :

socket.send(data, callback) 본질적으로 전화하는 것과 같습니다 socket.emit('message', JSON.stringify(data), callback)

소스 코드를 보지 않고도 send 함수가 더 효율적으로 편집 된다고 가정합니다 .

예, 기본적으로 방출은 객체를 보낼 수있게 해주므로 매우 편리합니다.

이 예제를 보자 socket.emit:

sendMessage: function(type, message) {
    socket.emit('message', {
        type: type,
        message: message
    });
}

집에서 점수를 유지하는 사람들을 위해 다음과 같이 사용합니다 socket.send.

sendMessage: function(type, message) {
    socket.send(JSON.stringify({
        type: type,
        message: message
    }));
}

27

socket.sendvanilla WebSocket 인터페이스와의 호환성을 위해 구현되었습니다. socket.emitSocket.IO만의 기능입니다. 둘 다 동일하지만 socket.emit메시지를 처리하는 데 조금 더 편리합니다.


socket.emit은 Socket.IO로 제한되지 않고 net에서도 작동합니다.
Ajay

0

기본적인 양방향 통신 시스템에서 socket.emit은 더 설득력 있고 사용하기 쉬운 것으로 입증되었으며 (개인 경험) 주로 그러한 목적으로 구축 된 Socket.IO의 일부입니다.


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