nod*_*nja 126 sockets node.js socket.io
这两者有什么区别?
我注意到,如果我从改变socket.emit
到socket.send
在一个工作程序,服务器无法接收消息,虽然我不明白为什么.
我还注意到,在我的程序,如果我从改变socket.emit
到socket.send
,服务器接收到消息,但它似乎多次接受它.当我console.log()
用来查看服务器收到的内容时,它会显示与我使用时不同的内容socket.emit
.
为什么会这样?你怎么知道何时使用socket.emit
或socket.send
?
Cha*_*les 115
使用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);
});
});
Run Code Online (Sandbox Code Playgroud)
客户:
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
Run Code Online (Sandbox Code Playgroud)
Socket.send也是如此,但你没有注册到'news'而是注册消息:
服务器:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.send('hi');
});
Run Code Online (Sandbox Code Playgroud)
客户:
var socket = io.connect('http://localhost');
socket.on('message', function (message) {
console.log(message);
});
Run Code Online (Sandbox Code Playgroud)
M.D*_*.D. 85
简单而精确(来源:Socket.IO google group):
socket.emit
允许您在服务器和客户端上发出自定义事件
socket.send
发送随'message'
事件一起收到的消息
Kyl*_*hay 45
TL; DR:
socket.send(data, callback)
基本上相当于调用 socket.emit('message', JSON.stringify(data), callback)
不看源代码,我会假设send函数更有效编辑:至少发送字符串消息?
所以是的,基本上发射允许你发送物体,这是非常方便的.
以下为例socket.emit
:
sendMessage: function(type, message) {
socket.emit('message', {
type: type,
message: message
});
}
Run Code Online (Sandbox Code Playgroud)
而对于那些在家里得分的人来说,这就是它的用途socket.send
:
sendMessage: function(type, message) {
socket.send(JSON.stringify({
type: type,
message: message
}));
}
Run Code Online (Sandbox Code Playgroud)
art*_*tch 26
socket.send
实现与vanilla WebSocket接口的兼容性.socket.emit
仅限Socket.IO的功能.它们都做同样的事情,但socket.emit
在处理消息方面更方便一些.