Socket.io中两个socket.emit调用的区别解析(WebRTC示例)
关于Socket.io中
socket.emit两个调用的区别解答 我不擅长Web开发,但正在尝试研究WebRTC的工作原理。在官方指南中看到如下代码:
io.sockets.on('connection', function(socket) { // convenience function to log server messages on the client function log() { var array = ['Message from server:']; array.push.apply(array, arguments); socket.emit('log', array); // this } socket.on('create or join', function(room) { if (numClients === 0) { socket.join(room); log('Client ID ' + socket.id + ' created room ' + room); socket.emit('created', room, socket.id); //this } }); });
想了解socket.emit('log', array);和socket.emit('created', room, socket.id);之间的区别。两者签名不同,但似乎作用都是向调用者发送信息?
这两个调用本质都是通过当前socket向发起连接的客户端发送消息,核心区别在于消息的事件名和携带的数据格式:
事件名不同
socket.emit('log', array):事件名为log,客户端需要监听log事件来接收这条消息,通常用来传递日志类的提示信息socket.emit('created', room, socket.id):事件名为created,客户端要监听created事件,用来通知客户端“房间创建成功”的业务状态
传递的数据形式不同
- 第一个调用只传了一个参数
array,是把所有日志内容打包成数组发送给客户端 - 第二个调用传了两个独立参数
room和socket.id,Socket.io会自动把这些参数打包成数组,客户端监听created事件时,可以通过回调的参数依次拿到房间名和客户端ID
- 第一个调用只传了一个参数
举个客户端接收的例子:
// 接收log事件 socket.on('log', function(msgArray) { console.log(msgArray.join(' ')); // 打印完整日志 }); // 接收created事件 socket.on('created', function(roomId, clientId) { console.log(`房间${roomId}创建成功,你的ID是${clientId}`); });
简单说,它们都是服务端给当前客户端发消息,只是用不同的事件名区分业务场景,传递的数据结构也根据需求做了拆分或打包。
内容的提问来源于stack exchange,提问作者nutella_eater
相关产品推荐
相关产品推荐

