📜  websocket servcer 连接被拒绝 nodejs - Javascript (1)

📅  最后修改于: 2023-12-03 14:48:26.205000             🧑  作者: Mango

WebSocket Server 连接被拒绝

问题描述

在使用 Node.js 编写 WebSocket Server 时,客户端连接时会出现连接被拒绝的问题。在浏览器或终端中访问 ws://localhost:PORT 时,会得到类似下面的错误信息:

WebSocket connection to 'ws://localhost:PORT/' failed: 
Error in connection establishment: net::ERR_CONNECTION_REFUSED
解决方法
  1. 监听端口

确保 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

  1. 检查域名

如果 WebSocket Server 在本地运行,则客户端使用 ws://localhost:PORT 连接即可。但如果 WebSocket Server 在远程服务器上运行,则需要使用服务器域名或 IP 地址代替 localhost

在客户端使用域名或 IP 地址时,需要注意设置跨域策略。如果客户端和服务器端不在同一个域名下,则需要在服务器端设置跨域策略,否则客户端会出现跨域访问限制。

  1. 检查防火墙

检查防火墙设置,确保能够对 WebSocket Server 的监听端口进行访问。

在 Windows 系统上,可以通过 Windows Defender 防火墙 设置来开放端口的访问权限。

在 Linux 系统上,可以通过 iptables 命令来开放端口的访问权限。

  1. 检查监听地址

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 连接被拒绝的原因有很多,可能是端口未开放、域名设置错误、跨域访问限制、防火墙设置等。根据错误信息来定位问题,并针对具体原因做出相应的解决措施可以解决连接被拒绝的问题。