先按ctrl+c终止当前进程,再用lsof -i :3000(macos/linux)或netstat -ano | findstr :3000(windows)查pid,最后kill -9 [pid]或taskkill /pid [pid] /f释放端口。

VSCode 里 node server.js 报错 EADDRINUSE 怎么办
改完代码直接再运行 node server.js,八成会卡在这儿。Node 进程不会自动退出,端口被占着,新进程就起不来。
- 先按
Ctrl+C终止当前终端里的进程 - 确认端口没残留:macOS/Linux 执行
lsof -i :3000,Windows 执行netstat -ano | findstr :3000,找到 PID 后用kill -9 [PID]或taskkill /PID [PID] /F - VSCode 可装插件
Auto Kill Terminal,避免手抖忘了关
io() 传 express app 还是 http.Server?
传 express app 会报错:Server requires a net.Server instance。Socket.io 不认 Express 封装过的应用对象,只认底层的 HTTP server 实例。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 必须显式创建:
const server = http.createServer(app) - 再把
server传给new Server(server),不是new Server(app) - 别用
app.listen(3000)——它返回的是http.Server实例,但和express绑定太深,socket.io无法可靠接管连接握手
前端连不上 localhost:3000 的常见原因
不是服务没起来,而是协议、路径或加载方式错了。双击打开 index.html(file:// 协议)必失败,跨域+握手协议不匹配。
- HTML 必须由 Express 返回:
app.get('/', (req, res) => res.sendFile(__dirname + '/index.html')) - 客户端脚本必须走服务端路径:
<script src="/socket.io/socket.io.js"></script>,不能写本地路径如./node_modules/socket.io/client-dist/socket.io.js - 连接地址要带协议且端口一致:
const socket = io('http://localhost:3000'),别写成127.0.0.1或漏掉http:// - Live Server 插件只服务静态文件,对 Socket.io 客户端 JS 没用——它依赖服务端动态注入 handshake 参数
VSCode 终端里该用 npm start 还是 node server.js?
两者都能跑,但 npm start 更可控,尤其配合 package.json 的 scripts 字段可统一入口。
- 在
package.json里加:"start": "node server.js" - VSCode 里右键
package.json→ “Run Script” → “start”,比手动输命令少出错 - 如果用了
nodemon,改成"dev": "nodemon server.js",保存即重启,但注意它默认监听.js文件,别忘了加--ext js,json如果配置也热更 - 别依赖 VSCode 的“运行”按钮(▶️),它不读
package.json,容易跑错文件
socket.io 的 handshake 阶段对请求头、协议、路径极其敏感,哪怕多一个斜杠或少一个协议头都可能静默失败。调试优先看浏览器 Network 标签页里 /socket.io/?EIO=...&transport=polling 请求是否 200,而不是只盯着控制台有没有 connected 日志。










