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