socket.emit()与socket.send()
这两者有什么区别?
我注意到,如果我从一个工作程序中的socket.send
更改为socket.emit
,服务器无法收到消息,但我不明白为什么。
我还注意到,在我的程序中,如果我从socket.emit
更改为socket.send
,服务器收到一条消息,但似乎多次接收它。 当我使用console.log()
来查看服务器接收到的内容时,它显示了与使用socket.emit
不同的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也是这样做的,但是你不需要注册'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.IO谷歌组 ):
socket.emit允许您在服务器和客户端上发出自定义事件
socket.send发送与“消息”事件一起收到的消息
TL; DR:
socket.send(data, callback)
本质上等同于调用socket.emit('message', JSON.stringify(data), callback)
不看源代码,我会假设发送函数更有效的编辑:至less发送string消息 ?
所以基本上是发射允许你发送对象,这是非常方便的。
以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
实现与vanilla WebSocket接口的兼容性。 socket.emit只是socket.emit
的function。 它们都是一样的,但是socket.emit
在处理消息方面更加方便。
在基本的双向通信系统中,socket.emit已被certificate是更具说服力和易于使用的(个人经验),并且是主要为此目的而构build的Socket.IO的一部分