.NET SignalR

参考

.NET+Vue 使用SignalR推送数据 - netlock - 博客园 (cnblogs.com)

ASP.NET Core 使用 SignalR 遇到的 CORS 问题 - MyZony - 博客园 (cnblogs.com)

环境配置

后端

安装依赖包

Swashbuckle.AspNetCore

创建连接类

csharp 复制代码
using Microsoft.AspNetCore.SignalR;

namespace SignalR
{
    public class MyHub:Hub
    {
        public Task SendPublicMsg(string msg)
        {
            string connectionId = this.Context.ConnectionId;
            string msgToSend = $"{connectionId} {DateTime.Now}:{msg}";
            return Clients.All.SendAsync("PublicMsgReceived", msgToSend);
        }
    }
}

服务注册

ini 复制代码
builder.Services.AddSignalR();

.........................

app.MapHub<MyHub>("/MyHub");

配置跨域

ini 复制代码
// 添加跨域策略
string[] urls = new[] { "http://localhost:5173"};

builder.Services.AddCors(option =>
{
    option.AddPolicy("CorsPolicy", 
        opt => opt
            .WithOrigins(urls)
            .AllowAnyHeader()
            .AllowAnyMethod()
            .AllowCredentials());
});
.........................


// 使用跨域策略
app.UseCors("CorsPolicy");

前端

安装依赖

npm install @microsoft/signalr

核心代码

修改HelloWorld.vue

xml 复制代码
<script setup>
import { onMounted,ref } from 'vue';
import * as signalR from "@microsoft/signalr"

let input_value = ref()
let connc = ref()

const connection = new signalR.HubConnectionBuilder()
  .withUrl("https://localhost:7253/MyHub")
  .withAutomaticReconnect() //断线自动重连
  .build();
connection.start();

const fromResponse = ref([])
connection.on('PublicMsgReceived',msg=>{
  console.log(msg)
  fromResponse.value.push(msg)
})

//自动重连成功后的处理
connection.onreconnected(connectionId => {
    alert(connectionId);
  });

const submit = ()=>{
  console.log(input_value.value)
  connection.invoke("SendPublicMsg",input_value.value)
}

</script>

<template>
  <input v-model="input_value">
  <button style="border: 1px solid #ccc;" @click="submit">提交</button>
  <ul>
    <li v-for="(value, key, index) in fromResponse" :key="key" style="text-align : left;">{{ key + 1 }}: {{ value }}</li>
  </ul>

</template>

<style scoped>
</style>

注意参数要与后端对应

测试

分别打开两个浏览器窗口,可以进行即时通讯

相关推荐
小码哥_常5 分钟前
Java后端定时任务抉择:@Scheduled、Quartz、XXL - Job终极对决
后端
uzong10 分钟前
Skill 被广泛应用,到底什么是 Skill,今天详细介绍一下
人工智能·后端·面试
小码哥_常23 分钟前
Kafka平替!SpringBoot+Redis Stream+消费组打造极致消息队列
后端
IT_陈寒2 小时前
Redis缓存击穿:3个鲜为人知的防御策略,90%开发者都忽略了!
前端·人工智能·后端
uzong2 小时前
Harness Engineering 是什么?一场新的 AI 范式已经开始
人工智能·后端·架构
唐叔在学习3 小时前
Python桌面端应用最小化托盘开发实践
后端·python·程序员
yuhaiqiang3 小时前
被 AI 忽悠后,开始怀念搜索引擎了?
前端·后端·面试
二闹4 小时前
Python文件读取三巨头你该选择哪一个?
后端·python
苏三说技术4 小时前
推荐几个牛逼的AI Agent项目
后端
武子康4 小时前
大数据-253 离线数仓 - Airflow 入门与任务调度实战:DAG、Operator、Executor 部署排错指南
大数据·后端·apache hive