这两者有什么区别?我注意到,如果我在一个工作程序中将socket.emit更改为socket.send,服务器无法接收到消息,尽管我不明白为什么。我还注意到,在我的程序中,如果我从socket.emit更改为socket.send,服务器会收到一条消息,但它似乎会收到多次。当我使用console.log()查看服务器接收到的内容时,它显示的内容与使用socket.emit时不同。为什么会这样?如何知道何时使用socket.emit或socket.send?
socket.emit
socket.send
console.log()
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); });
gcuhipw92#
简单而精确(来源:Socket.IO google group):socket.emit允许您在服务器和客户机上发出自定义事件socket.send发送与'message'事件一起接收的消息
'message'
np8igboo3#
TL;DR:socket.send(data, callback)本质上等同于调用socket.emit('message', JSON.stringify(data), callback)不看源代码,我会假设send函数更高效 *edit:对于发送字符串消息,至少 *?所以是的,emit基本上允许你发送对象,这是非常方便的。以socket.emit为例:
socket.send(data, callback)
socket.emit('message', JSON.stringify(data), callback)
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 })); }
2guxujil4#
实现socket.send是为了与vanilla WebSocket接口兼容。socket.emit是Socket的特性。它们都做同样的事情,但是socket.emit在处理消息方面更方便一些。
vddsk6oq5#
在基本的双向通信系统中,套接字。emit已被证明更有说服力和易于使用(个人经验),是Socket的一部分。主要为此目的而构建的IO
mcdcgff06#
https://socket.io/docs/client-api/#socket-send-args-acksocket.send//发送消息事件socket.emit(eventName[, ...args][, ack])//您可以自定义eventName
socket.emit(eventName[, ...args][, ack])
0kjbasz67#
根据官方文档:socket.send-发送message事件。这可以像这样使用:
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,因为它更容易理解,并保持一致
7条答案
按热度按时间9w11ddsr1#
带插座。emit你可以注册自定义事件,像这样:
服务器:
客户:
Socket.send也是这样,但你不是注册到'news',而是注册到message:
服务器:
客户:
gcuhipw92#
简单而精确(来源:Socket.IO google group):
socket.emit
允许您在服务器和客户机上发出自定义事件socket.send
发送与'message'
事件一起接收的消息np8igboo3#
TL;DR:
socket.send(data, callback)
本质上等同于调用socket.emit('message', JSON.stringify(data), callback)
不看源代码,我会假设send函数更高效 *edit:对于发送字符串消息,至少 *?
所以是的,emit基本上允许你发送对象,这是非常方便的。
以
socket.emit
为例:对于那些在家里保持分数的人来说,下面是使用
socket.send
的情况:2guxujil4#
实现
socket.send
是为了与vanilla WebSocket接口兼容。socket.emit
是Socket的特性。它们都做同样的事情,但是socket.emit
在处理消息方面更方便一些。vddsk6oq5#
在基本的双向通信系统中,套接字。emit已被证明更有说服力和易于使用(个人经验),是Socket的一部分。主要为此目的而构建的IO
mcdcgff06#
https://socket.io/docs/client-api/#socket-send-args-ack
socket.send
//发送消息事件socket.emit(eventName[, ...args][, ack])
//您可以自定义eventName0kjbasz67#
更新v4。x
根据官方文档:
socket.send
-发送message
事件。这可以像这样使用:socket.emit
-发送自定义事件。这是这样使用的:我个人建议使用socket。emit,因为它更容易理解,并保持一致