socket.emit()与socket.send()(socket.emit() vs. sock

2019-06-26 07:16发布

什么是这两者之间的区别?

我注意到,如果我从改变socket.emitsocket.send在一个工作程序,服务器无法接收消息,虽然我不明白为什么。

我还注意到,在我的程序,如果我从改变socket.emitsocket.send ,服务器收到消息,但它似乎多次接受它。 当我使用console.log()可查看收到什么服务器,它显示了一些东西,当我使用不同的socket.emit

为什么这种行为? 你怎么知道什么时候使用socket.emitsocket.send

Answer 1:

随着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不相同,但你不注册到“新闻”,而是消息:

服务器:

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


Answer 2:

简单且精确的(来源: Socket.IO谷歌组 ):

socket.emit让你发出服务器和客户端上的自定义事件

socket.send发送其与接收到的消息'message'事件



Answer 3:

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


Answer 4:

socket.send被用于与香草WebSocket的接口的兼容性实现。 socket.emit只是Socket.IO的功能。 他们都做同样的,但socket.emit是在处理消息多一点方便。



Answer 5:

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

socket.send //发送消息事件

socket.emit(eventName[, ...args][, ack]) //你可以定制eventName的



Answer 6:

在基本的双向通信系统,socket.emit已被证明是更有说服力和易于使用的(个人经验),是Socket.IO的一部分,其主要是满足这种目的



文章来源: socket.emit() vs. socket.send()