socket.emit()与socket.send()

时间:2012-07-16 05:22:30

标签: sockets node.js socket.io

这两者之间有什么区别?

我注意到如果我在工作程序中从socket.emit更改为socket.send,则服务器无法接收消息,但我不明白原因。

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

为什么会这样?您如何知道何时使用socket.emitsocket.send

6 个答案:

答案 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)

简单而精确(来源:Socket.IO google group):

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

socket.send会发送使用'message'事件

收到的消息

答案 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的一部分,主要是为此目的而构建的