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

Socket.IO客户端报错ReferenceError: io未定义,房间通信失效如何解决?

问题解决步骤

1. 修复客户端Socket.IO文件引用错误

你当前引用的socket.io.js路径不正确,Socket.IO服务器会自动在根路径下提供客户端脚本,无需自行存放该文件。修改playerA.html中的脚本引用:

<!-- 替换原socket.io.js引用 -->
<script src="/socket.io/socket.io.js"></script>

2. 修正客户端JS的变量名混淆问题

你创建了sock作为Socket实例,但后续错误使用了未定义的socket发送消息,需统一变量名:

// 确保x1、y1、row、col已在触发移动时正确赋值
let message = "player A has moved from " + x1 + ":" + y1 + " to " + row + ":" + col;
// 创建Socket连接(同域名下无需额外传URL)
const sock = io();
const room = 'room1';  
sock.emit('joinRoom', room);
// 使用正确的变量名sock发送消息
sock.emit('move', { room, message });

sock.on('move', (msg) => {
    console.log(msg);
});
console.log(message);

3. 确保棋子移动逻辑的触发时机

当前代码中的x1、y1、row、col变量若未提前定义,会引发新的错误。需将这段代码放在棋子移动的事件回调内(比如棋盘格子的点击事件),保证这些变量有合法值时再执行发送逻辑。

4. 验证连接与消息流程

  • 重启服务器,访问http://localhost:3000,服务端控制台应打印a user connected;
  • 触发棋子移动后,服务端会打印User joined room: room1,若需要在服务端直接查看移动消息,可修改server.js的move事件处理:
socket.on('move', (data) => {
    const { room, message } = data;
    console.log(`收到房间${room}的移动消息:${message}`); // 新增此行打印消息
    io.to(room).emit('move', message);
});

完成以上修改后,客户端即可正常连接服务器,棋子移动消息会在服务端终端打印,同时房间内其他客户端也能收到该消息。

内容的提问来源于stack exchange,提问作者Anthony Kinyua

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:33:17