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);
      });
    });
相关推荐
冷冷的菜哥2 天前
ASP.NET Core上传文件到minio
后端·asp.net·上传·asp.net core·minio
ArabySide3 天前
【ASP.NET Core】双Token机制在ASP.NET Core中的实现
后端·asp.net core
ArabySide1 个月前
【ASP.NET Core】探讨注入EF Core的DbContext在HTTP请求中的生命周期
后端·http·asp.net·asp.net core·efcore
ChaITSimpleLove1 个月前
.NET9 使用 OData 协议项目实战
restful·asp.net core·webapi·仓储模式·开放数据协议·分层隔离·.net odata
爱吃香蕉的阿豪1 个月前
SignalR 全解析:核心原理、适用场景与 Vue + .NET Core 实战
vue.js·microsoft·c#·.netcore·signalr
饭勺oO1 个月前
从WebApi迁移到Minimal API?有了这个神器,小白也能10分钟搞定!
asp.net core·minimalapi
csdn_aspnet2 个月前
使用 .NET Core 7 SignalR 构建实时聊天应用程序
signalr·.net7
csdn_aspnet2 个月前
.NET 9.0 SignalR 支持修剪和原生 AOT
aot·signalr·.net9
包达叔3 个月前
Admin.Net中的消息通信SignalR解释
signalr
专注VB编程开发20年4 个月前
在 ASP.NET 中,HTTP 处理程序(HttpHandler)是处理 HTTP 请求的核心组件
iis·asp.net·asp.net core