ASP.NET Core SignalR的协议协商

  1. SignalR支持多种服务器推送方式:Websocket、Server-Sent Events、长轮询。默认按顺序尝试。
  2. F12查看协商过程。
  3. websocket和HTTP是不同的协议,为什么能用同一个端口。
  4. 在【开发人员工具】的【网络】页签中看WebSocket通信过程。

协议协商问题

  1. 集群中协议协商的问题:"协商"请求被服务器A处理,而接下来的WebSocket请求却被服务器B处理。
  2. 解决方法:粘性会话和禁用协商。
  3. "粘性会话"(Sticky Session):把来自同一个客户端的请求都转发给同一台服务器上。缺点:因为共享公网IP等造成请求无法被平均的分配到服务器集群;扩容的自适应性不强。
  4. "禁用协商":直接向服务器发出WebSocket请求。WebSocket连接一旦建立后,在客户端和服务器端直接就建立了持续的网络连接通道,在这个WebSocket连接中的后续往返WebSocket通信都是由同一台服务器来处理。缺点:无法降级到"服务器发送事件"或"长轮询",不过不是大问题。

禁用协议协商方式

javascript 复制代码
//设置连接选项,跳过协商,使用WebSockets传输
const options = {
    skipNegotiation: true,
    transport: signalR.HttpTransportType.WebSockets
};
//创建连接
connection = new signalR.HubConnectionBuilder()
.withUrl('https://localhost:7181/MyHub',options)
.withAutomaticReconnect().build();
javascript 复制代码
onMounted(async function () {
      //设置连接选项,跳过协商,使用WebSockets传输
      const options = {
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
      };
      //创建连接
      connection = new signalR.HubConnectionBuilder()
        // .withUrl('https://localhost:7181/MyHub')
        .withUrl('https://localhost:7181/MyHub',options)
        .withAutomaticReconnect().build();
      //开始连接
      await connection.start();
      //注册ReceivePublicMessage事件,接收消息,添加到messages数组
      connection.on('ReceivePublicMessage', msg => {
        state.messages.push(msg);
      });
    });
相关推荐
wangbin55425 天前
使用Scalar.AspNetCore来管理你的OpenApi
asp.net core
曹振华9 天前
.net 6 signalr
.net·signalr
ArabySide12 天前
【ASP.NET Core】分布式场景下ASP.NET Core中JWT应用教程
分布式·后端·asp.net core
绿荫阿广18 天前
用纯.NET开发并制作一个智能桌面机器人(六):使用.NET开发一个跨平台功能完善的小智AI客户端
c#·.net·asp.net core·maui·winui
冷冷的菜哥2 个月前
ASP.NET Core文件分片上传
c#·asp.net·asp.net core·文件分片上传
冷冷的菜哥2 个月前
ASP.NET Core上传文件到minio
后端·asp.net·上传·asp.net core·minio
ArabySide2 个月前
【ASP.NET Core】双Token机制在ASP.NET Core中的实现
后端·asp.net core
ArabySide3 个月前
【ASP.NET Core】探讨注入EF Core的DbContext在HTTP请求中的生命周期
后端·http·asp.net·asp.net core·efcore
ChaITSimpleLove3 个月前
.NET9 使用 OData 协议项目实战
restful·asp.net core·webapi·仓储模式·开放数据协议·分层隔离·.net odata
爱吃香蕉的阿豪3 个月前
SignalR 全解析:核心原理、适用场景与 Vue + .NET Core 实战
vue.js·microsoft·c#·.netcore·signalr