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);
      });
    });
相关推荐
ChaITSimpleLove19 天前
深入解析 ASP.NET Core Options 模式:IOptions、IOptionsSnapshot 与 IOptionsMonitor 实战指南
asp.net core·snapshot·依赖注入di·options模式·ioptions·ioptionsmonitor·配置热更新
医疗信息化王工20 天前
医院自律端系统——预警处置模块全栈实战(ASP.NET Core + Vue3 + Quartz 定时调度)
mysql·postgresql·vue·asp.net core·quartz
刚子编程1 个月前
.NET 8 Web开发入门(六):Blazor 全栈开发——告别 JavaScript 焦虑
javascript·数据绑定·signalr·组件化开发·全栈开发·blazor server·c# 写前端
CSharp精选营1 个月前
.NET 8 Web开发入门(六):Blazor 全栈开发——告别 JavaScript 焦虑
数据绑定·signalr·组件化开发·全栈开发·blazor server·blazor web·c# 写前端
Esofar1 个月前
Dddify:给 ASP.NET Core 项目一套轻量、清晰、可落地的 DDD 基础设施
c#·ddd·asp.net core·cqrs·dddify·clean architecture
CSharp精选营2 个月前
.NET 8 Web开发入门(三):解构引擎——依赖注入(DI)与中间件管道
中间件·asp.net core·依赖注入·ioc容器·请求管道·服务生命周期
医疗信息化王工2 个月前
基于ASP.NET Core的医院输血审核系统设计与实现
后端·mvc·asp.net core·输血审核
医疗信息化王工3 个月前
基于ASP.NET Core的住院日志统计系统设计与实现
后端·layui·asp.net core·npoi·dapper
无风听海3 个月前
.NET10之HttpContext.RequestServices 深入解析
.net·asp.net core
硅基喵3 个月前
聊聊 ASP.NET Core 中间件和过滤器的区别
asp.net core