これら2つの違いは何ですか?
動作中のプログラムでsocket.emit
からsocket.send
に変更すると、サーバーはメッセージを受信できませんでしたが、理由はわかりません。
また、プログラムでsocket.emit
からsocket.send
に変更した場合、サーバーはメッセージを受信しますが、複数回受信するようです。 console.log()
を使用してサーバーが受信したものを確認すると、socket.emit
を使用したときとは異なるものが表示されます。
なぜこの動作ですか? socket.emit
またはsocket.send
を使用するタイミングはどのようにわかりますか?
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);
});
シンプルで正確(ソース: Socket.IO googleグループ ):
socket.emit
を使用すると、サーバーとクライアントでカスタムイベントを発行できます
socket.send
は、'message'
イベントで受信したメッセージを送信します
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
}));
}
socket.send
は、Vanilla WebSocketインターフェイスとの互換性のために実装されています。 socket.emit
はSocket.IOのみの機能です。どちらも同じことをしますが、socket.emit
はメッセージの処理において少し便利です。
https://socket.io/docs/client-api/#socket-send-args-ack
socket.send
//メッセージイベントを送信します
socket.emit(eventName[, ...args][, ack])
// eventNameをカスタマイズできます
基本的な双方向通信システムでは、socket.emitはより説得力があり使いやすいことが実証されており(個人的な経験)、主にそのような目的のために構築されたSocket.IOの一部です。