NodeJS socket.emit()vs.socket.send()

dz6r00yl  于 2023-04-29  发布在  Node.js
关注(0)|答案(7)|浏览(164)

这两者有什么区别?
我注意到,如果我在一个工作程序中将socket.emit更改为socket.send,服务器无法接收到消息,尽管我不明白为什么。
我还注意到,在我的程序中,如果我从socket.emit更改为socket.send,服务器会收到一条消息,但它似乎会收到多次。当我使用console.log()查看服务器接收到的内容时,它显示的内容与使用socket.emit时不同。
为什么会这样?如何知道何时使用socket.emitsocket.send

9w11ddsr

9w11ddsr1#

带插座。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',而是注册到message:
服务器:

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

gcuhipw92#

简单而精确(来源:Socket.IO google group):
socket.emit允许您在服务器和客户机上发出自定义事件
socket.send发送与'message'事件一起接收的消息

np8igboo

np8igboo3#

TL;DR:
socket.send(data, callback)本质上等同于调用socket.emit('message', JSON.stringify(data), callback)
不看源代码,我会假设send函数更高效 *edit:对于发送字符串消息,至少 *?
所以是的,emit基本上允许你发送对象,这是非常方便的。
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
    }));
}
2guxujil

2guxujil4#

实现socket.send是为了与vanilla WebSocket接口兼容。socket.emit是Socket的特性。它们都做同样的事情,但是socket.emit在处理消息方面更方便一些。

vddsk6oq

vddsk6oq5#

在基本的双向通信系统中,套接字。emit已被证明更有说服力和易于使用(个人经验),是Socket的一部分。主要为此目的而构建的IO

mcdcgff0

mcdcgff06#

https://socket.io/docs/client-api/#socket-send-args-ack
socket.send//发送消息事件
socket.emit(eventName[, ...args][, ack])//您可以自定义eventName

0kjbasz6

0kjbasz67#

更新v4。x

根据官方文档:
socket.send-发送message事件。这可以像这样使用:

// Client side
socket.send('hello')

// Server side
socket.on('message', (data) => {
   console.log(data) // hello
})

socket.emit-发送自定义事件。这是这样使用的:

// Client side
socket.emit('hello', 'rick')

// Server side
socket.on('hello', (name) => {
   console.log(name) // rick
})

我个人建议使用socket。emit,因为它更容易理解,并保持一致

相关问题