Node.js建立WebRTC连接时出现EADDRINUSE端口占用报错如何解决
错误核心原因
EADDRINUSE 错误标识你Node.js服务尝试绑定的WebRTC端口2361、1236已经被当前设备上的其他进程占用,后续的未捕获错误抛出是因为代码未对socket绑定失败的error事件做监听处理。
可行解决方案
- 终止占用对应端口的进程
- Linux/macOS环境执行命令查找占用端口的进程PID:
lsof -i:2361,同理执行lsof -i:1236查找1236端口的占用进程,获取到PID后执行kill -9 <替换为对应PID>终止进程即可释放端口。 - Windows环境执行命令查找占用端口的进程PID:
netstat -ano | findstr "2361",同理查找1236端口的占用进程,获取到PID后执行taskkill /f /pid <替换为对应PID>终止进程。
- Linux/macOS环境执行命令查找占用端口的进程PID:
- 修改WebRTC服务端口配置为动态分配
不要在代码中硬编码固定端口作为WebRTC绑定端口,将端口配置项设置为0即可让操作系统自动分配当前可用的空闲端口,从根源避免固定端口冲突问题。 - 添加socket错误事件兜底处理
在socket实例上添加error事件监听,避免端口绑定失败直接抛出未捕获错误导致服务崩溃,可参考代码逻辑:rtcSocket.on('error', (err) => { if (err.code === 'EADDRINUSE') { console.log(`端口${err.port}被占用,自动切换空闲端口重试`); // 此处可添加重试绑定逻辑,自动使用其他端口 } }) - 本地调试场景快速解决
如果是多次重启Node服务导致端口未及时释放的情况,等待10-30秒待TCP连接超时释放后再重启服务即可,无需额外操作。
内容的提问来源于stack exchange,提问作者michferrero
相关产品推荐
相关产品推荐

