ASP.NET Core WebSocket、SignalR

embedded/2025/2/12 11:54:10/

目录

WebSocket-toc" name="tableOfContents" style="margin-left:40px">WebSocket

SignalR-toc" name="tableOfContents" style="margin-left:40px">SignalR

SignalR%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8-toc" name="tableOfContents" style="margin-left:40px">SignalR的基本使用


WebSocket

  1. WebSocket基于TCP协议,支持二进制通信,双工通信。
  2. 性能和并发能力更强。
  3. WebSocket独立于HTTP协议,不过我们一般仍然把WebSocket服务器端部署到Web服务器上,因为可以借助HTTP协议完成初始的握手(可选),并且共享HTTP服务器的端口(主要)。

SignalR" name="SignalR">SignalR

  1. ASP.NET Core SignalR(以下简称SignalR),是.NET Core平台下对WebSocket的封装。
  2. Hub(集线器),数据交换中心。

SignalR%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8" name="SignalR%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8">SignalR的基本使用

  1. 创建MyHub.cs继承自Hub
    public class MyHub : Hub
    {public Task SendPublicMessage(string message){string connId = this.Context.ConnectionId;string msgToSend = $"{connId}{DateTime.Now}:{message}";return Clients.All.SendAsync("ReceivePublicMessage", msgToSend);}
    }
  2. 注册SignalR、Cors服务,使用Hub中间件,app.MapControllers()之前调app.MapHub<MyHub>("/MyHub")。
    string[] urls = new[] { "http://localhost:5173" };
    builder.Services.AddCors(options =>options.AddDefaultPolicy(builder => builder.WithOrigins(urls).AllowAnyMethod().AllowAnyHeader().AllowCredentials()));builder.Services.AddSignalR()app.MapHub<MyHub>("/MyHub");
    app.MapControllers();
  3. 前端Vue代码
    <template><input type="text" v-model="state.userMessage" v-on:keypress="txtMsgOnkeypress" /><div><ul><li v-for="(msg, index) in state.messages" :key="index">{{ msg }}</li></ul></div>
    </template><script>
    import { reactive, onMounted } from 'vue';
    import * as signalR from '@microsoft/signalr';
    let connection;
    export default {name: 'Login',setup() {//创建响应式对象,userMessage:输入的消息,messages:接收到的消息const state = reactive({ userMessage: "", messages: [] });//按下回车键发送消息,调用SendPublicMessage方法,发送消息,清空输入框const txtMsgOnkeypress = async function (e) {if (e.keyCode != 13) return;await connection.invoke("SendPublicMessage", state.userMessage); state.userMessage = "";};//组件挂载时,创建连接onMounted(async function () {//创建连接connection = new signalR.HubConnectionBuilder().withUrl('https://localhost:7181/MyHub').withAutomaticReconnect().build();//开始连接await connection.start();//注册ReceivePublicMessage事件,接收消息,添加到messages数组connection.on('ReceivePublicMessage', msg => {state.messages.push(msg);});});//返回响应式对象和方法return { state, txtMsgOnkeypress };},
    }
    </script>


http://www.ppmy.cn/embedded/161587.html

相关文章

探索质数:从试除法到质数筛

引言 质数&#xff08;Prime Number&#xff09;是数学中的基本概念之一&#xff0c;指大于 1 且只能被 1 和自身整除的自然数。质数在密码学、计算机科学和数论中有着广泛的应用。本文将详细介绍质数的相关算法&#xff0c;包括试除法判断质数、分解质因数以及质数筛法&#…

鸿蒙NEXT开发-鸿蒙三方库

基本介绍 三方库是开发者在系统能力的基础上进行了一层具体功能的封装&#xff0c;对其能力进行拓展&#xff0c;提供更加方便的接口&#xff0c;提升开发效率的工具。 我们在之前的课程中学习过如何安装三方库axios了&#xff0c;我们大家可以通过ohpm install ohos/axios进行…

差速驱动机器人MPC算法实现-C++

差速驱动机器人&#xff0c;其运动学模型需要考虑线速度和角速度。MPC&#xff08;模型预测控制&#xff09;需要建立预测模型&#xff0c;并在每个控制周期内求解优化问题。 差速驱动机器人的运动学方程通常包括位置&#xff08;x, y&#xff09;和航向角θ&#xff0c;线速度…

六.logback记录日志文件并按大小日期分割文件

文章目录 前言一、log4j&#xff0c;log4j2&#xff0c;logback&#xff0c;slf4j的关系&#xff1f;二、使用logback配置自定义日志记录1.引入库2.创建配置文件logback-spring.xml3.配置示例如下 总结 前言 通常我们项目中控制台能显示输出系统运行的日志&#xff0c;但是当我…

SMB开启和关闭

高版本和低版本操作系统之间共享文件会因为SMB协议问题无法访问&#xff0c;开启和关闭操作如下&#xff1a; --查看 PS C:\Windows\system32> Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol EnableSMB1Protocol EnableSMB2Protocol ----…

国产化人工智能“产学 研用”一体化创新模式的智慧快消开源了

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。国产化人工智能“…

Arduino 第四章:数字输出 —— 深入解析引脚差异与 LED 顺序点亮实践

引言 在电子制作与自动化控制领域&#xff0c;Arduino 以其简单易用和强大的扩展性成为众多爱好者和专业开发者的首选平台。数字输出作为 Arduino 基础且重要的功能之一&#xff0c;能让我们通过程序控制外部设备&#xff0c;如点亮 LED 灯、驱动继电器等。在这一章节&#xf…

timescaladb时序数据库高可用docker镜像使用

timescaladb时序数据库高可用docker镜像使用 timescaladb时序数据库高可用&#xff0c;基于bitnami/postgresql-repmgr docker镜像制作&#xff0c;实现数据同步和故障自动转移主备切换。 使用示例 参考&#xff0c;附docker compose配置例。 pg-0:image: wjy2020/timescal…