Socket.io调用io.broadcast.emit报emit undefined错误如何修复
错误原因
broadcast 是挂载在单个 socket 实例上的属性,不属于全局 io 对象,你直接调用 io.broadcast 拿到的是 undefined,所以触发了「无法读取 undefined 的 emit 属性」的报错。
修复方法
把出错行的调用主体从 io 换成 connection 回调里拿到的 socket 实例即可:
io.on('connection', (socket) => { var ip = socket.client.request.headers['x-forwarded-for'] || socket.client.conn.remoteAddress || socket.conn.remoteAddress || socket.request.connection.remoteAddress; console.log(ip) console.log('user ket noi ' + clients) clients++ // 把这里的io改成socket即可 socket.broadcast.emit("new msg", { msg: `Hiện tại có ${clients} đang kết nối !!` }); socket.on('on-chat', data => { io.emit('user-chat', data) }) })
方法区别说明
你可以根据自己的业务需求选择对应的广播方法:
io.emit():向所有已连接的客户端(包含刚接入的新客户端)发送消息,如果你希望新用户自己也能看到在线人数提示,可以用这个方法socket.broadcast.emit():仅向除当前新连接客户端之外的所有其他客户端发送消息,适合用来给老用户推送「有新用户加入」的提示,新用户自身不会收到这条消息
内容的提问来源于stack exchange,提问作者VU HOANG ANH
相关产品推荐
相关产品推荐

