.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>

注意参数要与后端对应

测试

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

相关推荐
程序员cxuan22 分钟前
Gemini 4 Argon 正式发布!
人工智能·后端·程序员
亚林瓜子1 小时前
Spring Boot 集成 ip2region 离线 IP 库实战指南
java·spring boot·后端·ip·ip2region
盛世宏博智慧档案1 小时前
恒湿净化一体机联动开发:档案馆温湿度阈值判断与启停控制实践
java·后端·struts·恒湿机·加湿除湿消毒净化一体机
兔子零10241 小时前
FastAPI 零基础入门教程:写过 Node.js,就能轻松学会 Python 后端开发(一)
前端·后端·python
Thneonl1 小时前
ZK、etcd、Consul 怎么选:差别不在共识,在壳
后端·架构
vipxieliang1 小时前
ValidX 应用于 HR系统员工信息验证:入职、离职、社保数据
java·spring boot·后端
花间相见1 小时前
【计算基础|网络15】【上手】Socket 网络编程:亲手写 TCP/UDP 程序
后端
huaweichenai2 小时前
spring boot实现base64上传
java·spring boot·后端
ThinkerQAQ_2 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
后端
Bazingga2 小时前
让Agent的挣扎可见:执行轨迹面板与生成统计行
后端