Node.js WebSocket代理疑问:proxy与endpoint变量解析
WebSocket代理代码中的变量解释与配置说明
一、示例代码中proxy和endpoint的含义
proxy:这是中间代理服务器的地址,你的WebSocket客户端会先连接到这个代理,再由它把请求转发到最终的WebSocket服务。示例里优先读取环境变量http_proxy,没设置的话默认用本地5000端口的HTTP/HTTPS代理。endpoint:这是你最终要访问的目标WebSocket服务地址,也就是真正提供服务的后端地址。示例里优先取命令行传入的第二个参数,默认值是ws://185.105.184.115:46607。
二、示例代码的局限性
这段代码是客户端通过代理访问目标WebSocket的逻辑,本身是个客户端,不是接收外部连接的服务端,所以不需要配置监听端口。如果你要做的是「自己搭一个服务端,接收外部WebSocket连接,再转发到另一个目标地址」,这段代码不适用。
三、实现“接收WebSocket连接并代理到目标路径”的服务端代码
下面是符合你需求的代码,会监听指定端口,把收到的客户端连接转发到目标WebSocket服务:
const http = require('http'); const WebSocket = require('ws'); // 配置参数:修改这两个值即可 const LISTEN_PORT = 8080; // 你的代理服务器监听端口,外部客户端连这个端口 const TARGET_WS_URL = 'ws://localhost:3000'; // 要代理到的目标WebSocket地址(支持ws://localhost:port或完整URL) // 创建HTTP服务器用于处理WebSocket升级 const server = http.createServer(); const wss = new WebSocket.Server({ noServer: true }); // 处理客户端WebSocket连接 wss.on('connection', (clientSocket) => { // 连接到目标WebSocket服务 const targetSocket = new WebSocket(TARGET_WS_URL); // 客户端消息转发到目标服务 clientSocket.on('message', (data) => { if (targetSocket.readyState === WebSocket.OPEN) { targetSocket.send(data); } }); // 目标服务消息转发回客户端 targetSocket.on('message', (data) => { if (clientSocket.readyState === WebSocket.OPEN) { clientSocket.send(data); } }); // 一方关闭则同步关闭另一方连接 clientSocket.on('close', () => targetSocket.close()); targetSocket.on('close', () => clientSocket.close()); // 错误日志 clientSocket.on('error', err => console.error('客户端连接错误:', err)); targetSocket.on('error', err => console.error('目标服务连接错误:', err)); }); // 处理HTTP升级请求,转为WebSocket连接 server.on('upgrade', (req, socket, head) => { wss.handleUpgrade(req, socket, head, (ws) => { wss.emit('connection', ws, req); }); }); // 启动服务器 server.listen(LISTEN_PORT, () => { console.log(`WebSocket代理服务器已启动,监听端口 ${LISTEN_PORT}`); console.log(`请求将代理到: ${TARGET_WS_URL}`); });
配置说明
- 修改
LISTEN_PORT为你希望代理服务器监听的端口,外部客户端连接ws://你的服务器IP:LISTEN_PORT即可。 - 修改
TARGET_WS_URL为实际要转发到的WebSocket地址,格式支持ws://localhost:端口或者完整的远程URL。
内容的提问来源于stack exchange,提问作者Ezioadf2
相关产品推荐
相关产品推荐

