【ASP.NET CORE】 11. SignalR

在ASP.NET Core 2.1 下使用SignalR 1.0构建最简单的实时聊天(附可运行的实例源码) 前言 Hi,大家好!前不久.NET Core2.1发布了,SignalR也发布了1.0正式版。今天我就来写一个简单的教程教大家如何构建一个简单的在线实时聊天页。 PS:关于SignalR的介绍和说明具体就不在这说明了,论坛或者官方网都有详细说明。 使用VS2017创建ASP.NET Core Web应用程序 选择新建 ASP.NET Core Web网站,... 阅读详情

本系列专栏基于杨中科老师的《ASP.NET Core技术内幕与项目 实战》,本人记录梳理的学习笔记,有部分的增补和省略。更全面系统的讲解,请看杨老师的视频课:【.NET教程,.Net Core视频教程,杨中科主讲】。

一、服务器向客户端推送数据

1. 传统方案:长轮询

  • 原理:客户端发起请求→服务器阻塞请求,直到有数据 / 超时→客户端收到响应后立即发起新请求,循环往复。
  • 缺点:频繁 HTTP 请求 / 响应,开销大、延迟高、并发能力弱,仅作为降级方案。

2. WebSocket:现代实时通信标准

  • 基于TCP 协议,支持二进制 + 文本双工通信,客户端和服务器可双向主动发送数据。
  • 性能优势:一次握手,持久连接,开销远小于长轮询,并发能力大幅提升。
  • 部署特点:独立于 HTTP 协议,但复用 HTTP 服务器端口 + 借助 HTTP 完成初始握手(无需单独端口,兼容性更强)。
  • 局限:原生 API 繁琐,需手动处理连接、重连、序列化、兼容降级等问题。

3. ASP.NET Core SignalR:WebSocket 高级封装

  • 定位:.NET Core 平台下实时通信的一站式解决方案,自动适配通信方式(优先 WebSocket,降级 SSE / 长轮询)。
  • 核心概念:Hub(集线器) → 实时通信的数据交换中心,统一管理客户端连接、消息分发、组管理。
  • 优势:简化 API、自动重连、依赖注入友好、支持分布式部署、集成身份认证。

二、SignalR 项目搭建

核心流程

创建 Web API 服务端 → 配置 SignalR 与跨域 → 编写 Hub 集线器 → Vue 前端接入 → 实现全员消息推送。

1. 服务端开发

(1)环境准备

创建ASP.NET Core Web API项目,无需额外安装基础 NuGet 包(ASP.NET Core 内置 SignalR)。

(2)编写 Hub 集线器

Hub 是消息处理核心,继承自Hub基类,定义客户端可调用的方法:

/// <summary>
/// 聊天室集线器,客户端通过此Hub与服务端通信
/// </summary>
public class ChatRoomHub : Hub
{
    /// <summary>
    /// 发送公共消息(全员接收)
    /// 客户端通过Invoke调用此方法
    /// </summary>
    /// <param name="message">客户端发送的消息内容</param>
    public Task SendPublicMessage(string message)
    {
        // 获取当前客户端的唯一连接ID
        string connId = this.Context.ConnectionId;
        string msg = $"{connId} {DateTime.Now}: {message}";
        
        // 向所有连接的客户端推送消息(客户端监听ReceivePublicMessage事件)
        return Clients.All.SendAsync("ReceivePublicMessage", msg);
    }
}
(3)注册 SignalR 与跨域配置

SignalR 基于浏览器跨域策略,必须配置 CORS,否则前端无法连接:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

// 1. 注册SignalR服务
builder.Services.AddSignalR();

// 2. 配置跨域策略(允许前端地址访问)
string[] urls = new[] { "http://localhost:3000" }; // 前端Vue运行地址
builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(policy =>
    {
        policy.WithOrigins(urls) // 允许的源
              .AllowAnyMethod()  // 允许所有请求方法
              .AllowAnyHeader()  // 允许所有请求头
              .AllowCredentials(); // 允许携带凭据(Cookie/Token,必选!)
    });
});

var app = builder.Build();

// 启用中间件(顺序不能错)
app.UseCors(); // 启用跨域
app.UseHttpsRedirection();
app.UseAuthorization();

// 3. 映射Hub端点(客户端通过此地址连接SignalR)
app.MapHub<ChatRoomHub>("/Hubs/ChatRoomHub");
app.MapControllers();

app.Run();

2. 前端开发(Vue3)

(1)安装客户端 SDK
npm install @microsoft/signalr
(2)编写实时聊天组件
<template>
  <div>
    <!-- 消息输入框(回车发送) -->
    <input 
      type="text" 
      v-model="state.userMessage" 
      @keypress="handleKeyPress" 
      placeholder="输入消息,回车发送"
    />
    <!-- 消息列表 -->
    <ul>
      <li v-for="(msg, index) in state.messages" :key="index">
        {{ msg }}
      </li>
    </ul>
  </div>
</template>

<script setup>
import { reactive, onMounted } from 'vue';
import * as signalR from '@microsoft/signalr';

// 响应式数据
const state = reactive({
  userMessage: '', // 输入框消息
  messages: []     // 消息列表
});

let connection; // SignalR连接对象

// 页面挂载后建立SignalR连接
onMounted(async () => {
  // 1. 配置连接
  connection = new signalR.HubConnectionBuilder()
    .withUrl('https://localhost:7112/Hubs/ChatRoomHub') // 服务端Hub地址
    .withAutomaticReconnect() // 自动重连(断线自动恢复)
    .build();

  // 2. 监听服务端推送的公共消息
  connection.on('ReceivePublicMessage', (msg) => {
    state.messages.push(msg);
  });

  // 3. 启动连接
  try {
    await connection.start();
    console.log('SignalR连接成功');
  } catch (err) {
    console.error('连接失败:', err);
  }
});

// 回车发送消息
const handleKeyPress = async (e) => {
  if (e.keyCode !== 13) return; // 非回车直接返回
  if (!state.userMessage.trim()) return;

  // 调用服务端Hub的SendPublicMessage方法
  await connection.invoke('SendPublicMessage', state.userMessage);
  state.userMessage = ''; // 清空输入框
};
</script>

三、集群部署

1. 协议协商问题

当 SignalR 部署在服务器集群时,会出现协议协商失败:

  • 第一步:客户端发起协商请求,被服务器 A 处理;
  • 第二步:后续 WebSocket 请求被负载均衡转发到服务器 B;
  • 结果:连接丢失,通信失败。

2. 解决方案

方案 1:粘性会话
  • 原理:负载均衡配置会话绑定,同一客户端的所有请求强制转发到同一台服务器。
  • 缺点:公网 IP 共享会导致负载不均;集群扩容适应性差,无法灵活弹性伸缩。
方案 2:禁用协商(推荐)

直接强制使用 WebSocket 协议,跳过协商步骤,一次连接绑定单台服务器,无需依赖负载均衡配置。

  • 优点:简单高效,无粘性会话缺陷;
  • 缺点:无法降级到 SSE / 长轮询(现代浏览器均支持 WebSocket,几乎无影响)。

前端修改代码:

// 配置:跳过协商 + 仅使用WebSocket
const transportOptions = {
  skipNegotiation: true,
  transport: signalR.HttpTransportType.WebSockets
};

connection = new signalR.HubConnectionBuilder()
  .withUrl('https://localhost:7047/Hubs/ChatRoomHub', transportOptions)
  .withAutomaticReconnect()
  .build();

四、分布式部署

1. 跨服务器消息同步问题

集群中 4 个客户端分别连接服务器 A、B,A 服务器的消息无法推送给连接 B 的客户端(消息仅在单服务器内广播)。

2. 解决方案:Redis 背板

所有服务器连接同一个 Redis,通过 Redis 做消息中转,实现跨服务器消息同步。

实施步骤
  1. 安装 NuGet 包

    Install-Package Microsoft.AspNetCore.SignalR.StackExchangeRedis
    
  2. 注册 Redis 背板

    builder.Services.AddSignalR()
           // 配置Redis连接字符串 + 通道前缀(区分项目)
           .AddStackExchangeRedis("127.0.0.1:6379", options => 
           {
               options.Configuration.ChannelPrefix = "MyChatApp_";
           });
    
  3. 原理:服务端发送消息→写入 Redis→所有服务器订阅 Redis 消息→分发给自身连接的客户端,实现全局广播。

五、身份认证

1. JWT集成问题

默认 SignalR 无权限控制,任何人可连接 Hub,需集成 JWT 实现登录后访问。

2. 服务端配置

(1)定义 JWT 配置类
/// <summary>
/// JWT配置参数(从appsettings.json读取)
/// </summary>
public class JWTOptions
{
    public string SigningKey { get; set; } // 密钥
    public int ExpireSeconds { get; set; } // 过期时间
}
(2)appsettings.json 配置
"JWT": {
  "SigningKey": "YourSecretKey1234567890123456", // 长度≥16位
  "ExpireSeconds": 86400 // 1天过期
}
(3)注册 JWT 认证
// 绑定JWT配置
services.Configure<JWTOptions>(builder.Configuration.GetSection("JWT"));

// 注册JWT认证
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(x =>
        {
            var jwtOpt = builder.Configuration.GetSection("JWT").Get<JWTOptions>();
            var keyBytes = Encoding.UTF8.GetBytes(jwtOpt.SigningKey);
            var secKey = new SymmetricSecurityKey(keyBytes);

            // Token验证规则
            x.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = false,
                ValidateAudience = false,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = secKey
            };

            // 关键:SignalR通过URL参数传递Token(WebSocket不支持请求头)
            x.Events = new JwtBearerEvents
            {
                OnMessageReceived = context =>
                {
                    // 从URL的access_token参数获取Token
                    var accessToken = context.Request.Query["access_token"];
                    var path = context.HttpContext.Request.Path;
                    
                    // 匹配Hub地址则赋值Token
                    if (!string.IsNullOrEmpty(accessToken) && 
                        path.StartsWithSegments("/Hubs/ChatRoomHub"))
                    {
                        context.Token = accessToken;
                    }
                    return Task.CompletedTask;
                }
            };
        });
(4)启用认证中间件
// 顺序:认证 → 授权
app.UseAuthentication(); // 新增
app.UseAuthorization();
(5)Hub 添加权限校验

在 Hub 类上添加[Authorize]特性,未登录用户无法连接:

[Authorize] // 必须登录才能访问此Hub
public class ChatRoomHub : Hub
{
    // ...
}
(6)编写登录接口
[ApiController]
[Route("api/[controller]")]
public class AccountController : ControllerBase
{
    private readonly IOptions<JWTOptions> _jwtOptions;

    public AccountController(IOptions<JWTOptions> jwtOptions)
    {
        _jwtOptions = jwtOptions;
    }

    [HttpPost("login")]
    public IActionResult Login(string username, string password)
    {
        // 省略用户名密码校验
        var userId = "1001"; // 实际从数据库获取
        var claims = new[]
        {
            new Claim(ClaimTypes.NameIdentifier, userId), // 用户唯一ID(定向推送用)
            new Claim(ClaimTypes.Name, username)           // 用户名
        };

        // 生成Token
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtOptions.Value.SigningKey));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
        var token = new JwtSecurityToken(
            expires: DateTime.Now.AddSeconds(_jwtOptions.Value.ExpireSeconds),
            signingCredentials: creds,
            claims: claims
        );

        return Ok(new { Token = new JwtSecurityTokenHandler().WriteToken(token) });
    }
}

3. 前端携带 Token 连接

// 登录后获取Token
const startConnection = async (token) => {
  const options = {
    skipNegotiation: true,
    transport: signalR.HttpTransportType.WebSockets,
    accessTokenFactory: () => token // 自动携带Token到URL
  };

  connection = new signalR.HubConnectionBuilder()
    .withUrl('https://localhost:7047/Hubs/ChatRoomHub', options)
    .withAutomaticReconnect()
    .build();

  await connection.start();
};

六、定向推送

SignalR 支持三种筛选方式,满足私聊、分组、全员推送场景:

  1. ConnectionId:单个客户端连接 ID;
  2. Groups:客户端分组(如房间、部门);
  3. UserId:用户唯一 ID(对应ClaimTypes.NameIdentifier)。

实战:用户私聊

1. 服务端 Hub 方法
/// <summary>
/// 发送私信(指定用户接收)
/// </summary>
/// <param name="destUserName">目标用户名</param>
/// <param name="message">消息内容</param>
public async Task<string> SendPrivateMessage(string destUserName, string message)
{
    // 1. 根据用户名查询目标用户ID(实际从数据库获取)
    string destUserId = await _userService.GetUserIdByNameAsync(destUserName);
    
    // 2. 获取当前登录用户信息
    string srcUserName = this.Context.User.FindFirst(ClaimTypes.Name)!.Value;
    string time = DateTime.Now.ToShortTimeString();

    // 3. 向指定用户ID推送消息
    await Clients.User(destUserId).SendAsync("ReceivePrivateMessage", 
        srcUserName, time, message);
    
    return "发送成功";
}
2. 前端调用与监听
// 发送私信
const sendPrivate = async (destUserName, msg) => {
  await connection.invoke("SendPrivateMessage", destUserName, msg);
};

// 监听私信
connection.on('ReceivePrivateMessage', (srcUser, time, msg) => {
  state.messages.push(`${srcUser} ${time} 私信:${msg}`);
});

核心 API 

服务端 API作用
Clients.All全员推送
Clients.User(userId)指定用户推送
Clients.Client(connId)指定连接推送
Clients.Others排除自己,全员推送
Groups.AddToGroupAsync加入分组
Groups.RemoveFromGroupAsync退出分组
Clients.Group(groupName)分组推送

总结

  1. SignalR :封装 WebSocket 细节,自动适配通信方式,零成本实现实时推送;Hub 为核心,配置跨域 + 映射端点,前端通过 SDK 连接;支持用户、连接、分组三种维度,满足私聊 / 分组 / 全员场景。
  2. 集群 / 分布式:禁用协商解决协议问题,Redis 背板实现跨服务器消息同步。
  3. 安全控制:JWT 集成,通过 URL 参数传递 Token,[Authorize]校验权限。
【HomeAssistant接入的设备实现天猫精灵】 Home Assistant的HassLife组件: 此Home Assistant的组件可以让天猫精灵、小爱同学对接HomeAssistant平台上的设备,控制设备、查询上报设备状态。 注意:本插件只负责上报HomeAssistant的设备状态信息到服务器,控制功能需要在HassLife 平台上配置。......... 阅读详情

相关推荐

汽车软件工程师必看:ASPICE流程实战指南(附完整产物清单)

本文为汽车软件工程师提供ASPICE流程实战指南,详细解析如何搭建合规开发环境、各阶段文档产出清单及工具链整合策略。通过实战案例和模板资源,帮助团队高效实施ASPICE标准,提升软件开发质量与效率。

weixin_29230805的博客 470

ASP.NET SignalR

ASP.NET SignalR是为ASP.NET开发人员提供的一个库,可以简化开发人员将实时Web功能添加到应用程序的过程。实时Web功能是指这样一种功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求新的数据。 可以用SignalR做什么? SignalR可用于将任何类型的"实时"web功能添加到ASP.NET应用程序。 比如最常用的...

927

告别手写代码!用Simulink给TI F28335 DSP自动生成C代码(保姆级环境配置)

本文详细介绍了如何利用Simulink为TI F28335 DSP自动生成C代码,告别传统手写代码的低效与错误。通过保姆级环境配置指南和实战案例,帮助开发者快速掌握模型驱动开发方法,大幅提升嵌入式开发效率,特别适合需要频繁修改算法参数或团队协作的工程师。

weixin_30388677的博客 416

ASP.NET Core 使用 SignalR 实现实时通讯

SignalR是一个用于ASP.NET的库,它允许服务器代码向连接的客户端实时发送推送通知。它使用WebSockets作为底层传输机制,但如果浏览器不支持WebSockets,它会自动回退到其他兼容的技术,如服务器发送事件(Server-Sent Events)或长轮询。 SignalR的主要特点是它支持双向通信,这意味着服务器可以主动向客户端发送消息,而客户端也可以发送消息给服务器。这与传统的HTTP请求不同,后者通常是单向的,即客户端向服务器发送请求,然后等待响应。

二十多岁的你迷茫又着急,想要车子,想要房子,想要享受旅行,你那么浮躁,拿什么看透人生! 2799

AD9361 LVDS数据接口时序解析与FPGA实现

本文详细解析了AD9361 LVDS数据接口的时序特性与FPGA实现方法,重点探讨了DATA_CLK、Rx_FRAME等关键信号的时序关系及数据拼接技巧。通过Verilog代码示例和调试经验分享,帮助开发者解决跨时钟域处理、IQ数据重组等常见问题,提升射频收发系统的稳定性与性能。

weixin_29186249的博客 128

生产环境下oracle19c rac恢复节点2

现状:目前节点1数据库集群服务处于正常,节点2服务器由于系统故障无法恢复,确认系统重装。目标:不影响业务的情况下,重新把节点2添加回集群中。

sqlora的专栏 867

【.Net Core】使用SignalR实现实时通信

SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用Web Socket, Server Sent Events 和 Long Polling作为底层传输方式. SignalR基于这三种技术构建, 抽象于它们之上, 它让你更好的关注业务问题而不是底层传输技术问题. SignalR这个框架分服务器端和客户端, 服务器端支持ASP.NET Core 和 ASP.NET; 而客户端除了支持浏览器里的javascript以外, 也支持其它类型的客户端, 例

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 5964

HFSS实战:手把手教你设计3.3-10.6GHz超宽带微带天线(附S11优化技巧)

本文提供了一份基于Ansys HFSS的超宽带微带天线实战设计指南,详细讲解了从3.3GHz到10.6GHz天线的建模、仿真与优化全流程。文章重点剖析了阻抗匹配的核心挑战,并分享了通过接地板开槽、参数化扫描及目标驱动优化等系统性技巧来优化S11曲线的实用方法,帮助射频工程师快速掌握超宽带天线设计的关键技能。

2y3u4i5o6p的博客 1081

Asp.NET MVC 中使用 SignalR 实现推送功能

一,简介 Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架。它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送请求或使用轮询技术来获取消息。 可访问其官方网站:https://github.com/SignalR/获取更多资讯。 二、Asp.net SignalR 是个什...

weixin_34419321的博客 750

1.3-----Simplify 3D切片软件:从新手困惑到高效打印的进阶设置指南

本文详细介绍了Simplify 3D切片软件在大型模型打印中的高效设置技巧,包括切片效率、支撑结构智能生成和精细参数调节等核心优势。通过实战案例和进阶参数设置指南,帮助用户从新手快速进阶到高效打印,显著提升3D打印质量和效率。

weixin_42552716的博客 422

精益六西格玛Python数字化应用开发-Day18 应用场景:家电企业生产效率优化

本文将重点介绍专门针对精益六西格玛黑带使用场景的 Python 库,这些库功能侧重于数据分析和流程优化,特别适用于 DMAIC 方法论和看板管理。考虑到读者具备中高级Python 使用经验,我们将深入探讨各库的高级功能和实际应用应用场景。 某家电企业生产线自动化程度高,数据量巨大,希望通过精益管理提升生产效率。企业借助 Python 脚本,打通各类数据源(MES、ERP、设备日志),自动归集生产数据,分析各工序的生产节拍、设备停机、效率损失,快速定位瓶颈环节

m0_56592100的博客 906

ASP.NET Core实时库SignalR简单应用

一、什么是SignalR: SignalR 是用于构建需要实时用户交互或实时数据更新的Web 应用程序的一个开放源代码.NET 库。不仅仅用在Web应用中,后面会讲到它的应用范围。它简化了简化了构建实时应用程序的过程,包括ASP.NET Server库和JavaScript Client库,以便管理Client与Server连接并将内容更新推送给Client。 SignalR可用于需要实时刷新获...

weixin_43163153的博客 949

【100%通过率】2024华为OD机试真题E卷 C++ 实现【栈数据合并/空栈压数】

向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设: 栈顶至栈底整数依次编号为n1、n2...nx, n1为最新压入的整数)

MISAYAONE的博客 1553

ASP.NET Core 11 实战:SignalR 认证刷新(Authentication Refresh)——令牌过期不断连

本文围绕 `practical-aspnetcore` 仓库中的 [projects/net11/signalr-auth-refresh](https://link.gitcode.com/i/e83b3441a1837b460394f579c5bb6ac2) 示例,讲解 ASP.NET Core 11(Preview 6 起引入)的 SignalR 认证刷新能力:当连接使用的访问令牌(acce

gitblog_00835的博客 954

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SkyWalking 服务端 Trace 采样实战:Trace 存储降 90%,不重启改采样率参数全解

> **30 秒速览** > - 解决的问题:100% 采样导致 trace 存储爆炸,而调低采样又容易丢故障链路。SkyWalking 的 OAP 服务端采样在落盘前按比例丢弃 trace,指标、拓扑、实例等监控数据完全不受影响。 > - 适合谁:跑 SkyWalking OAP 9.3.0+ 想控制 trace 存储成本的团队和运维同学。 > - 核心收益:采样决策在 OAP 解析管线内完成,

gitblog_00287的博客 247

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

.NET 为什么值得上手:跨平台开源框架五大核心能力完全指南

.NET 是微软推出的跨平台开源框架,以 C# 为主要开发语言,也支持 F# 等语言。无论你是写 Web 应用、桌面程序还是服务端服务,它都能在 Windows / Linux / macOS 三大操作系统上部署运行。官方仓库还集中收录了各版本的发布说明与动态,方便你随时核对某个版本改了什么。 ## 🧭 定位速览 .NET 是一套开源的运行时加库生态:你用 .NET 语言写业务逻辑,同一份代

gitblog_00739的博客 866

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

csharp_with_csharpfritz完全指南:从C基础到实战项目的终极学习路径

csharp_with_csharpfritz是一个全面的C#学习项目,包含了从基础语法到高级应用的完整学习路径,以及丰富的实战项目案例。无论是C#新手还是有一定经验的开发者,都能通过这个项目快速提升技能,掌握C#在各种场景下的应用。 ## 为什么选择csharp_with_csharpfritz? csharp_with_csharpfritz项目提供了丰富的学习资源,包括详细的笔记、幻灯片

gitblog_00415的博客 698

ASP.NET Core SignalR TypeScript/JavaScript 客户端(@microsoft/signalr)使用指南

`@microsoft/signalr` 是 ASP.NET Core 与 Azure SignalR Service 官方的 TypeScript/JavaScript 客户端,位于本仓库 [src/SignalR/clients/ts/signalr](https://link.gitcode.com/i/983a0293c00bd7598abc3da840a37617) 目录,用于在浏览器、

gitblog_00438的博客 741

ASP.NET Core SignalR入门:从零实现广播、群组与私聊实时通信

实时通信是现代Web应用的核心需求,它允许服务端主动向客户端推送数据,无需客户端轮询。其底层原理通常基于WebSocket协议,该协议在TCP连接之上提供了全双工通信能力,相比传统的HTTP请求-响应模式,显著降低了延迟和网络开销。这项技术的核心价值在于能够构建高度交互式的应用,如在线聊天、实时数据可视化、协同编辑和游戏等。在.NET技术栈中,ASP.NET Core SignalR作为官方实时通信库,通过Hub抽象层封装了连接管理、协议协商和消息路由等复杂细节,让开发者能够以简单的RPC模型快速实现双向通

weixin_34198762的博客 496

深入 static_file_service_client:Macro 静态文件服务 Rust 客户端的契约、实现与实战

在 Macro 这类把邮件、聊天、文档、任务与 Agent 放在同一工作区的系统中,附件、头像、聊天图片、AI 生成图片等二进制内容都需要一个统一的落盘出口。`static_file_service_client` 就是这条链路上最薄、也最关键的一层:它把「按 key 存取文件」封装成若干强类型异步方法,用内部鉴权头与服务端通信。本文以该 crate 的说明文档为骨架,结合仓库源码逐层拆解它的构造

gitblog_00047的博客 466

ASP.NET Core SignalR 客户端 MessagePack 协议详解:从安装到源码级协议剖析

`@microsoft/signalr-protocol-msgpack` 是 ASP.NET Core SignalR 官方提供的二进制消息协议实现,为 JavaScript/TypeScript 客户端带来基于 [MessagePack](https://link.gitcode.com/i/2ea0fcd2a2e33dae7267e9ab4847c2b8))为骨架,结合仓库内 TypeScr

gitblog_00582的博客 271

使用 .NET Core 7 和 SignalR 构建实时聊天应用程序

SignalR是一个 ASP.NET 库,它支持实时 Web 功能,允许服务器立即将更新推送到客户端,从而提高应用程序的效率和响应能力。它通过简化通信和支持各种传输协议,对于聊天应用程序、实时仪表板和协作工具中的即时更新非常有用。实时通信可以提高用户参与度,减少资源密集型轮询,并且对于在线游戏和金融交易平台等交互式应用程...

qq_35485206的博客 903

drawio-desktop:免费离线 draw.io 流程图桌面工具完整上手指南

drawio-desktop 是 draw.io 官方的 Electron 桌面版流程图工具,把核心编辑器完整打包到本地,画流程图、架构图、UML 图全程离线,图只存在你这台电脑上。它采用 GPL v3 许可,只要不改代码、接受 "as-is" 状态,个人和公司都能免费用于任何目的。 ## 跑起来:从零到第一屏 ### 环境检查 唯一的前提是 Node.js,版本要求 `>= 22.12.0

gitblog_00684的博客 312

signalr for java_ASP.NET Core SignalR Java 客户端

ASP.NET Core SignalR Java 客户端ASP.NET Core SignalR Java client11/12/2019本文内容Java 客户端允许 SignalR 从 java 代码(包括 Android 应用)连接到 ASP.NET Core 服务器。The Java client enables connecting to an ASP.NET Core SignalR...

weixin_34522296的博客 987

5分钟掌握 Megatron-Bridge 核心 AutoBridge API:HF 与 Megatron 模型互转只需 3 行代码

[![Megatron-Bridge 在 NeMo 框架中的定位与架构](https://raw.gitcode.com/gh_mirrors/me/Megatron-Bridge/raw/e97a67acbf1b7a8ae0a0e0f26c60fa9548e19bfe/Repo-Mbridge.png?utm_source=gitcode_repo_files)](https://link.gi

gitblog_00042的博客 713

ASP.NET Core SignalR入门:广播、群组与定向推送实时通信实战

实时Web通信是现代应用开发中的关键技术,它允许服务端主动向客户端推送数据,突破了传统HTTP请求-响应模式的限制。其核心原理基于WebSocket、Server-Sent Events等持久化连接协议,在底层自动协商最佳传输方式。这项技术的核心价值在于能够构建高交互性、低延迟的应用体验。在工程实践中,开发者常利用远程过程调用(RPC)模型来简化双向通信的编程复杂度。典型的应用场景包括在线聊天室、实时数据看板、协同编辑以及在线游戏等。本文以ASP.NET Core SignalR为例,通过一个集成**广播*

weixin_30824479的博客 418
上一篇: 【ASP.NET CORE】 10. 数据校验
下一篇: 【ASP.NET CORE】 12. DDD基本概念
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值