158

これら2つの違いは何ですか?

socket.emit動作中のプログラムで からに変更すると、サーバーがメッセージを受信できないことに気付きsocket.sendましたが、その理由はわかりません。

また、自分のプログラムで から に変更socket.emitするsocket.sendと、サーバーはメッセージを受信しますが、複数回受信しているように見えることにも気付きました。サーバーが受信したものを使用すると、使用console.log()した場合とは異なるものが表示されますsocket.emit

なぜこの動作ですか?またはをいつ使用するかをどのように知っていますsocket.emitsocket.send?

4

6 に答える 6

141

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 も同じことを行いますが、「ニュース」ではなくメッセージに登録します。

サーバ:

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);
});
于 2012-07-16T08:11:45.497 に答える
117

シンプルで正確 (出典: Socket.IO google group ):

socket.emitサーバーとクライアントでカスタムイベントを発行できます

socket.send'message'イベントで受信したメッセージを送信します

于 2012-12-07T17:04:25.063 に答える
50

TL;DR:

socket.send(data, callback)基本的に呼び出しと同等ですsocket.emit('message', JSON.stringify(data), callback)

ソースコードを見ずに、 send 関数がより効率的な編集であると仮定します: 文字列メッセージを送信するには、少なくとも?

つまり、基本的にemitを使用すると、オブジェクトを送信できます。これは非常に便利です。

この例を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
    }));
}
于 2013-11-15T22:25:53.050 に答える
0

基本的な双方向通信システムでは、socket.emit はより説得力があり使いやすいことが証明されており (個人的な経験)、主にそのような目的のために構築された Socket.IO の一部です。

于 2016-09-23T12:39:23.387 に答える