asp.net core webapi signalR通信

news/2025/3/26 19:20:48/

1.前端使用npm 导入signalR的包和jquery包
npm install jquery -y
npm install @micosoft/signalr -y

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>实时通讯</title><h1>signalr入门</h1>
</head>
<body><input type="button" value="发送" id="btnSend">
</body>
</html>
<script src="node_modules/jquery/dist/jquery.min.js"></script>
<script src="node_modules/@microsoft/signalr/dist/browser/signalr.min.js"></script>
<script>//创建连接对象var connection=new signalR.HubConnectionBuilder().withUrl("https://localhost:7177/myHub").build();
//当连接成功时
connection.start().then(function(){console.log("客户端连接成功");
})
//接收服务端主动推送过来的消息
connection.on("ReceiveMsg",function(msg){
alert(msg)
})
connection.on("completeOrder",function(msg){
alert(msg)
})
$("#btnSend").click(function(){
//客户端主动调用服务定义的通讯方法
connection.invoke("SendMsg",1,"测试").catch(function(err){
console.log(err)
})
})
</script>

后端–program中注入signalR的服务和跨域服务

 builder.Services.AddSignalR();//配置跨域builder.Services.AddCors(opt =>{opt.AddPolicy("ws.client", p =>{p.AllowCredentials();p.AllowAnyHeader();p.AllowAnyMethod();p.SetIsOriginAllowed(s => true);});});......app.MapHub<MyHub>("/myHub");app.UseCors("ws.client");

新建一个hub类

using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Caching.Memory;namespace WebApplication1.Hubs
{public class MyHub : Hub{private readonly IMemoryCache _memoryCache;public MyHub(IMemoryCache memoryCache){_memoryCache = memoryCache;}//当客户端成功连接时,会触发的方法public override Task OnConnectedAsync(){var cacheKey = "items_1";var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(30));_memoryCache.Set(cacheKey, Context.ConnectionId, cacheEntryOptions);return Task.CompletedTask;}//当客户端断开连接时,需要触发的方法public override Task OnDisconnectedAsync(Exception? exception){_memoryCache.Remove("items_1");return Task.CompletedTask;}public async void SendMsg(long userId, string msg){string sendMsg = $"服务端收到了客户端的消息,参数user={userId},msg={msg}";//服务端主动推送消息给所有的客户端//await Clients.All.SendAsync("ReceiveMsg", sendMsg);//给除了自己以外的所有客户端发送消息await Clients.Others.SendAsync("ReceiveMsg", sendMsg);}}
}

控制器类

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Caching.Memory;
using WebApplication1.Hubs;namespace WebApplication1.Controllers
{[ApiController][Route("[controller]/[action]")]public class WeatherForecastController : ControllerBase{private readonly IMemoryCache _memoryCache;private readonly IHubContext<MyHub> _hubContext;private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};private readonly ILogger<WeatherForecastController> _logger;public WeatherForecastController(ILogger<WeatherForecastController> logger, IMemoryCache memoryCache, IHubContext<MyHub> hubContext){_logger = logger;_memoryCache = memoryCache;_hubContext = hubContext;}[HttpGet(Name = "GetWeatherForecast")]public IEnumerable<WeatherForecast> Get(){return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = Random.Shared.Next(-20, 55),Summary = Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();}[HttpPost]public void AddOrder(){var connectionId = _memoryCache.Get("items_1").ToString();//服务端向指定客户端发送信息。_hubContext.Clients.Client(connectionId).SendAsync("completeOrder", "订单完成");}}
}

http://www.ppmy.cn/news/1174654.html

相关文章

allegro中shape的一些基本操作(三)——挖空铜皮(shape)、删除孤岛

挖空铜皮&#xff08;shape&#xff09; 去除孤岛shape 挖空铜皮&#xff08;shape&#xff09; 我们在有的时候需要考虑分布电容的对信号完整性的影响&#xff0c;所以需要在整个铜皮的中间挖掉一块铜皮。 这三个分别对应挖不规则铜皮、矩形铜皮、圆形铜皮 例如&#xff1a…

[support2022@cock.li].faust、[tsai.shen@mailfence.com].faust勒索病毒数据怎么处理|数据解密恢复

引言&#xff1a; 威胁网络安全的恶意软件不断涌现&#xff0c;而[support2022cock.li].faust勒索病毒则是其中的一员。这个网络黑暗角落的新星&#xff0c;以其数据绑架的方式&#xff0c;一度成为数据安全的威胁焦点。本文将探究[support2022cock.li].faust勒索病毒的运作方…

【软考系统架构设计师】2022年系统架构师综合知识真题及解析

本篇文章主要讲解2022年系统架构师综合知识真题及解析 【01】云计算服务体系结构如下图所示&#xff0c;图中①、②、③分别与SaaS、PaaS、Iaas相对应&#xff0c;图中①、②、③应为( )。 解析&#xff1a;答案选择B 从上到下&#xff0c;依次是应用层——平台层——基础设施…

【2024秋招】小米中间件后端开发一面2023-9-13-base武汉

1 自我介绍 2 快手实习 2.1 讲讲你写的curd启动器&#xff0c;做了哪些工作呢 答&#xff1a; 2.2 网上也有一些开源的curd代码生成器&#xff0c;你为什么需要自研呢&#xff08;重要&#xff09; 答&#xff1a; &#xff08;1&#xff09;这个必须得自研&#xff0c;因…

原型制作的软件 Experience Design mac( XD ) 中文版软件特色

​XD是一个直观、功能强大的UI/UX开发工具&#xff0c;旨在设计、原型、用户之间共享材料以及通过数字技术进行设计交互。Adobe XD提供了开发网站、应用程序、语音界面、游戏界面、电子邮件模板等所需的一切。xd mac软件特色 体验设计的未来。 使用 Adobe XD 中快速直观、即取即…

字节码同步指令

Java虚拟机可以支持方法级的同步和方法内部一段指令序列的同步&#xff0c;这两种同步结构都是使用管程&#xff08;Monitor&#xff0c;更常见的是直接将它称为“锁”&#xff09;来实现。 同步一段指令集序列通常是由Java语言中的synchronized语句块来表示的&#xff0c;Jav…

计算机网络-计算机网络体系结构-应用层

目录 一、网络应用模型 客户/服务器模型(Client/Server) P2P模型(Peer-to-peer) 二、域名解析系统(DNS) 域名 域名服务器 解析过程 三、文件传输协议(FTP) FTP控制原理 四、电子邮件 组成结构 协议 SMTP MIME POP3 IMAP 五、万维网和HTTP协议 概述 HTTP 报…

Ps:消除锯齿与修边

由于像素是方形的&#xff0c;在创建椭圆等带弧形的选区时容易在选区边缘产生锯齿。 Ps 中支持“消除锯齿” Anti-alias的选区工具有&#xff1a; 椭圆选框工具、套索工具、多边形套索工具、磁性套索工具、魔棒工具等。 勾选“消除锯齿”后&#xff0c;Ps 会在选区边界两侧约 1…