socket.on与socket.broadcast.emit的区别及使用原因咨询
Socket.io中socket.on与socket.broadcast.emit的区别及用途
先看你写的服务端代码:
const io = require('socket.io')(8000) const users = {}; io.on('connection' , socket =>{ socket.on('new-user-joined', name =>{ users[socket.id] = name ; socket.broadcast.emit('user-joined',name); }); socket.on('send',message =>{ socket.broadcast.emit('receive',{message: message , name : users[socket.id]}); }); });
下面直接说明两个方法的区别和用途:
socket.on()
- 这是监听事件的方法,专门用来接收客户端发来的指定事件。
- 比如你代码里的
socket.on('new-user-joined', ...),就是盯着客户端触发的new-user-joined事件——一旦有新用户加入并发送这个事件,服务端就执行回调逻辑:把用户名和当前socket的ID绑定存起来。 - 另一个
socket.on('send', ...)则是监听客户端发过来的send事件,拿到用户输入的消息,再做后续转发处理。
socket.broadcast.emit()
- 这是广播事件的方法,作用是把事件推送给除了当前这个socket连接之外的所有在线客户端。
- 比如
socket.broadcast.emit('user-joined',name),新用户加入时,服务端会给所有已经在线的用户发这个事件,告诉他们有新人进来,但不会通知刚加入的这个用户自己。 - 而
socket.broadcast.emit('receive', ...)则是把当前用户发的消息推给其他所有人,实现群聊里“一人发消息,其他人都能看到”的效果。
为什么要同时用这两个方法?
socket.on()是服务端的“接收器”,没有它,服务端根本拿不到客户端的任何请求或消息,没法响应用户操作;socket.broadcast.emit()是服务端的“广播器”,没有它,服务端没法把消息同步给其他用户,实时聊天的核心功能就实现不了;- 两者配合,刚好完成“客户端发消息给服务端→服务端转发给其他客户端”的完整流程,这也是你这款聊天应用能跑起来的关键。
内容的提问来源于stack exchange,提问作者Ritik Singh
相关产品推荐
相关产品推荐

