it-swarm.com.de

socket.emit () vs. socket.send ()

Was ist der Unterschied zwischen diesen beiden?

Ich habe festgestellt, dass der Server die Nachricht nicht erhalten konnte, wenn ich in einem Arbeitsprogramm von socket.emit zu socket.send gewechselt habe, obwohl ich nicht verstehe, warum.

Ich habe auch bemerkt, dass der Server in meinem Programm eine Nachricht erhält, wenn ich von socket.emit zu socket.send gewechselt habe, aber er scheint sie mehrmals zu erhalten. Wenn ich console.log() verwende, um zu sehen, was der Server erhalten hat, zeigt er etwas anderes als socket.emit.

Warum dieses Verhalten? Woher wissen Sie, wann Sie socket.emit oder socket.send verwenden sollen?

113
node ninja

Mit socket.emit können Sie benutzerdefinierte Ereignisse wie folgt registrieren:

server:

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);
  });
});

klient:

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

Socket.send tut dasselbe, aber Sie registrieren sich nicht bei "News", sondern bei der Nachricht:

server:

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

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

klient:

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

Einfach und präzise (Quelle: Socket.IO Google-Gruppe ):

Mit socket.emit können Sie benutzerdefinierte Ereignisse auf dem Server und dem Client ausgeben

socket.send sendet Nachrichten, die mit dem Ereignis 'message' empfangen werden

70
M.D.

TL; DR:

socket.send(data, callback) entspricht im Wesentlichen dem Aufruf von socket.emit('message', JSON.stringify(data), callback)

Ohne den Quellcode zu betrachten, würde ich davon ausgehen, dass die Sendefunktion effizienter ist edit: Zum Senden von String-Nachrichten mindestens

Im Grunde erlaubt emit Ihnen das Senden von Objekten, was sehr praktisch ist.

Nehmen Sie dieses Beispiel mit socket.emit:

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

und für diejenigen, die zu Hause Punkte sammeln, sieht es so aus, wie socket.send verwendet wird:

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

socket.send ist aus Gründen der Kompatibilität mit der Vanilla WebSocket-Schnittstelle implementiert. socket.emit ist nur in Socket.IO enthalten. Sie tun beide dasselbe, aber socket.emit ist etwas bequemer bei der Bearbeitung von Nachrichten.

24
artch

https://socket.io/docs/client-api/#socket-send-args-ack

socket.send // Sendet ein Nachrichtenereignis

socket.emit(eventName[, ...args][, ack]) // Sie können benutzerdefinierten Ereignisnamen verwenden

1
zhuxy

In grundlegenden Zwei-Wege-Kommunikationssystemen hat sich socket.emit als überzeugender und benutzerfreundlicher erwiesen (persönliche Erfahrung) und ist Teil von Socket.IO, das in erster Linie für solche Zwecke gebaut wird

0
kg11