You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Node.js的@microsoft/signalr(8.0.7)通过HTTP(S)代理建立WebSocket连接?

ASP.NET Core SignalR v8+ Node.js客户端配置HTTP(S)代理指南

前置依赖安装

首先确保安装所需包:

npm install @microsoft/signalr@8.0.7 https-proxy-agent ws

核心配置步骤

1. 创建HttpsProxyAgent实例

替换为你的公司代理地址,若需认证可直接在URL中携带用户名密码:

const { HttpsProxyAgent } = require("https-proxy-agent");

// 代理地址,带认证格式:http://username:password@proxy-host:port
const proxyAgent = new HttpsProxyAgent("http://your-corporate-proxy:8080");

2. 配置HTTP协商请求代理

SignalR的初始/negotiate请求通过HTTP客户端发送,我们自定义DefaultHttpClient并注入代理:

const { DefaultHttpClient } = require("@microsoft/signalr");

const proxyHttpClient = new DefaultHttpClient({
    handler: {
        agent: proxyAgent
    }
});

3. 配置WebSocket传输代理

通过自定义WebSocket构造函数,给ws实例添加代理配置,同时保留SignalR原生传输逻辑:

const { WebSocketTransport } = require("@microsoft/signalr");
const WebSocket = require("ws");

const proxyWebSocket = (url) => {
    return new WebSocket(url, {
        agent: proxyAgent
    });
};

const webSocketTransport = new WebSocketTransport({
    webSocketConstructor: proxyWebSocket
});

4. 整合到HubConnection

将自定义的HTTP客户端和WebSocket传输注入HubConnection,保留原生重连等功能:

const { HubConnectionBuilder } = require("@microsoft/signalr");

const connection = new HubConnectionBuilder()
    .withUrl("https://your-signalr-hub-url/hub", {
        httpClient: proxyHttpClient,
        transport: webSocketTransport
    })
    .withAutomaticReconnect() // 保留SignalR原生自动重连
    .build();

// 连接及事件监听逻辑
connection.start()
    .then(() => console.log("SignalR连接成功"))
    .catch(err => console.error("连接失败:", err));

connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user}: ${message}`);
});

关键说明

  • 此配置同时覆盖HTTP协商请求和WebSocket连接的代理需求,无需重写SignalR核心逻辑。
  • 代理认证支持:直接在代理URL中拼接username:password即可,例如http://admin:123456@proxy:8080。

内容的提问来源于stack exchange,提问作者Damian Popek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:03:16