这两者之间有什么区别?
我注意到如果我在工作程序中从socket.emit
更改为socket.send
,则服务器无法接收消息,但我不明白原因。
我还注意到,在我的程序中,如果我从socket.emit
更改为socket.send
,服务器会收到一条消息,但似乎多次收到该消息。当我使用console.log()
查看服务器收到的内容时,它会显示与我使用socket.emit
时不同的内容。
为什么会这样?您如何知道何时使用socket.emit
或socket.send
?
答案 0 :(得分:105)
使用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做同样的事情,但是你没有注册到'news'而是注册消息:
服务器:
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);
});
答案 1 :(得分:76)
答案 2 :(得分:44)
TL; DR:
socket.send(data, callback)
基本上等同于调用socket.emit('message', JSON.stringify(data), callback)
不看源代码,我会假设发送功能更有效编辑:发送字符串消息,至少?
所以是的,基本上发射允许你发送物品,非常方便。
以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
}));
}
答案 3 :(得分:25)
socket.send
以与vanilla WebSocket接口兼容。 socket.emit
仅是Socket.IO的功能。它们都是相同的,但socket.emit
在处理消息时更方便。
答案 4 :(得分:1)
https://socket.io/docs/client-api/#socket-send-args-ack
socket.send
//发送消息事件
socket.emit(eventName[, ...args][, ack])
//您可以自定义eventName
答案 5 :(得分:0)
在基本的双向通信系统中,socket.emit已被证明更具说服力且易于使用(个人体验),并且是Socket.IO的一部分,主要是为此目的而构建的