Was ist der Unterschied zwischen diesen beiden?
Ich habe festgestellt, dass der Server die Nachricht nicht empfangen konnte , wenn ich in einem Arbeitsprogramm von socket.emit
zu geändert habe socket.send
, obwohl ich nicht verstehe, warum.
Ich habe auch festgestellt, dass der Server in meinem Programm beim Wechsel von socket.emit
zu socket.send
eine Nachricht empfängt, diese jedoch anscheinend mehrmals empfängt. Wenn ich console.log()
sehe, was der Server empfangen hat, wird etwas anderes angezeigt als bei der Verwendung socket.emit
.
Warum dieses Verhalten? Woher weißt du, wann socket.emit
oder socket.send
?
socket.send
ist einfach nur ein Alias fürsocket.emit('message', message);
Einfach und präzise (Quelle: Socket.IO Google Group ):
socket.emit
Mit dieser Option können Sie benutzerdefinierte Ereignisse auf dem Server und dem Client ausgebensocket.send
sendet Nachrichten, die mit dem'message'
Ereignis empfangen werdenquelle
TL; DR:
socket.send(data, callback)
ist im Wesentlichen gleichbedeutend mit anrufensocket.emit('message', JSON.stringify(data), callback)
Ohne den Quellcode zu betrachten, würde ich annehmen, dass die Sendefunktion effizienter bearbeitet wird: zumindest zum Senden von String-Nachrichten ?
Im Grunde genommen können Sie mit emit Objekte senden, was sehr praktisch ist.
Nehmen Sie dieses Beispiel mit
socket.emit
:und für diejenigen, die zu Hause punkten, sieht es so aus
socket.send
:quelle
socket.send
wird aus Gründen der Kompatibilität mit der Vanilla WebSocket-Schnittstelle implementiert.socket.emit
ist nur eine Funktion von Socket.IO. Beide tun dasselbe, sind jedochsocket.emit
beim Umgang mit Nachrichten etwas bequemer.quelle
In einfachen Zwei-Wege-Kommunikationssystemen hat sich socket.emit als überzeugender und benutzerfreundlicher erwiesen (persönliche Erfahrung) und ist Teil von Socket.IO, das hauptsächlich für solche Zwecke entwickelt wurde
quelle
https://socket.io/docs/client-api/#socket-send-args-ack
socket.send
// Sendet ein Nachrichtenereignissocket.emit(eventName[, ...args][, ack])
// Sie können eventName benutzerdefinierenquelle