当前位置: 首页 > article >正文

ASP.NET Core WebSocket、SignalR

目录

WebSocket

SignalR

SignalR的基本使用


WebSocket

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

SignalR

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

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.kler.cn/a/539649.html

相关文章:

  • QTreeView和QTableView单元格添加超链接
  • idea整合deepseek实现AI辅助编程
  • 数据结构-基础
  • json转excel,在excel内导入json, json-to-excel插件
  • vscode中使用code-runner插件运行c程序语法报错code: 1
  • 【漫话机器学习系列】084.偏差和方差的权衡(Bias-Variance Tradeoff)
  • 从零开始掌握Python人工智能:实战案例、学习路径与职业建议
  • MOSSE目标跟踪算法详解
  • 深度学习-可调整嵌入维度、隐藏层维度和训练轮数
  • Chrome 浏览器 支持多账号登录和管理的浏览器容器解决方案
  • 二级C语言题解:迭代求根、字符串加法、字符串拆分
  • ARM Cortex-M3/M4 权威指南 笔记【一】架构
  • PHP 完整表单实例
  • 嵌入式硬件篇---OpenMV串口流和缓冲区
  • 用AI写游戏3——模拟发牌
  • Golang中 var make new
  • vue表格拖拽,可以多个单元格拖拽
  • html 列动态布局
  • 2025年2月份的一次前端面试题记录....
  • 使用Redis解决使用Session登录带来的共享问题
  • 深度学习-利用Tacotron 2 和 WaveGlow 模型 进行语音合成
  • Vue引入外部异步js函数并接收返回值
  • mysql中主键索引和联合索引的原理解析
  • 开源堡垒机 JumpServer 社区版实战教程:基于 Ubuntu 22.04 离线安装 JumpServer 社区版 v4.4.1
  • 变化检测论文阅读合集
  • 激活函数篇 01 —— 激活函数在神经网络的作用