📅  最后修改于: 2023-12-03 14:48:26.205000             🧑  作者: Mango
在使用 Node.js 编写 WebSocket Server 时,客户端连接时会出现连接被拒绝的问题。在浏览器或终端中访问 ws://localhost:PORT
时,会得到类似下面的错误信息:
WebSocket connection to 'ws://localhost:PORT/' failed:
Error in connection establishment: net::ERR_CONNECTION_REFUSED
确保 WebSocket Server 已经正确监听了相应的端口。可以使用下面的代码来实现端口的监听:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
console.log('Client connected');
});
该代码会创建一个 WebSocket 服务器,并监听 8080
端口。当有客户端连接时,会输出 Client connected
。
如果 WebSocket Server 在本地运行,则客户端使用 ws://localhost:PORT
连接即可。但如果 WebSocket Server 在远程服务器上运行,则需要使用服务器域名或 IP 地址代替 localhost
。
在客户端使用域名或 IP 地址时,需要注意设置跨域策略。如果客户端和服务器端不在同一个域名下,则需要在服务器端设置跨域策略,否则客户端会出现跨域访问限制。
检查防火墙设置,确保能够对 WebSocket Server 的监听端口进行访问。
在 Windows 系统上,可以通过 Windows Defender 防火墙
设置来开放端口的访问权限。
在 Linux 系统上,可以通过 iptables
命令来开放端口的访问权限。
WebSocket.Server 默认监听 localhost
地址,只能响应来自 localhost
的连接请求。如果需要响应来自其他 IP 地址的连接请求,则需要将监听地址设置为 0.0.0.0
。
const WebSocket = require('ws');
const wss = new WebSocket.Server({ host: '0.0.0.0', port: 8080 });
wss.on('connection', function connection(ws) {
console.log('Client connected');
});
以上代码将监听地址设置为 0.0.0.0
,可以响应来自任何 IP 地址的连接请求。
WebSocket Server 连接被拒绝的原因有很多,可能是端口未开放、域名设置错误、跨域访问限制、防火墙设置等。根据错误信息来定位问题,并针对具体原因做出相应的解决措施可以解决连接被拒绝的问题。