You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:27:03