与 socket.send()的对比

这两者有什么区别?

我注意到,如果我在一个工作程序中从 socket.emit改为 socket.send,服务器将无法接收到消息,尽管我不明白为什么。

我还注意到,在我的程序中,如果我将 socket.emit改为 socket.send,服务器会收到一条消息,但似乎会多次收到。当我使用 console.log()查看服务器接收到的内容时,它会显示与使用 socket.emit时不同的内容。

为什么会出现这种行为? 你怎么知道什么时候使用 socket.emit或者 socket.send

220722 次浏览

使用 socket.sent,您可以注册这样的自定义事件:

服务器:

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

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

实现 socket.send是为了与普通的 WebSocket 接口兼容。socket.emit只是 Socket.IO 的特性。它们都执行相同的操作,但是 socket.emit在处理消息方面更方便一些。

简洁明了(资料来源: Socket.IO google group) :

socket.emit允许您在服务器和客户端上发出自定义事件

socket.send发送与 'message'事件一起接收的消息

译者:

socket.send(data, callback)基本上等同于调用 socket.emit('message', JSON.stringify(data), callback)

不看源代码,我会假设 send 函数是更有效的 编辑: 至少用于发送字符串消息

所以是的,基本上发出允许你发送对象,这是非常方便的。

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.sent 被证明是更有说服力和更易于使用的(个人经验) ,并且是 Socket.IO 的一部分,Socket.IO 主要是为此目的构建的

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

发送消息事件

socket.emit(eventName[, ...args][, ack])//您可以定制 events Name