什么是这两者之间的区别?
我注意到,如果我从改变socket.emit
到socket.send
在一个工作程序,服务器无法接收消息,虽然我不明白为什么。
我还注意到,在我的程序,如果我从改变socket.emit
到socket.send
,服务器收到消息,但它似乎多次接受它。 当我使用console.log()
可查看收到什么服务器,它显示了一些东西,当我使用不同的socket.emit
。
为什么这种行为? 你怎么知道什么时候使用socket.emit
或socket.send
?
随着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);
});
简单且精确的(来源: Socket.IO谷歌组 ):
socket.emit
让你发出服务器和客户端上的自定义事件
socket.send
发送其与接收到的消息'message'
事件
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
}));
}
socket.send
被用于与香草WebSocket的接口的兼容性实现。 socket.emit
只是Socket.IO的功能。 他们都做同样的,但socket.emit
是在处理消息多一点方便。
https://socket.io/docs/client-api/#socket-send-args-ack
socket.send
//发送消息事件
socket.emit(eventName[, ...args][, ack])
//你可以定制eventName的
在基本的双向通信系统,socket.emit已被证明是更有说服力和易于使用的(个人经验),是Socket.IO的一部分,其主要是满足这种目的
文章来源: socket.emit() vs. socket.send()