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

注意参数要与后端对应

测试

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

相关推荐
魔尔助理顾问3 小时前
一个简洁高效的Flask用户管理示例
后端·python·flask
李长渊哦6 小时前
使用Druid连接池优化Spring Boot应用中的数据库连接
数据库·spring boot·后端
web135085886356 小时前
【Spring Boot】Spring AOP动态代理,以及静态代理
spring boot·后端·spring
nbsaas-boot7 小时前
Go 自动升级依赖版本
开发语言·后端·golang
zzyh1234568 小时前
springcloud的组件及作用
后端·spring·spring cloud
尚学教辅学习资料8 小时前
基于SpringBoot的图书借阅小程序+LW参考示例
spring boot·后端·小程序·java毕设·图书借阅
山海不说话8 小时前
从零搭建微服务项目Base(第5章——SpringBoot项目LogBack日志配置+Feign使用)
spring boot·后端·spring·spring cloud·微服务·logback
databook10 小时前
『Python底层原理』--CPython的变量实现机制
后端·python
初尘屿风10 小时前
小程序类毕业设计选题题目推荐 (29)
spring boot·后端·学习·微信·小程序·课程设计
JavaGuide10 小时前
武汉小米 Java 岗位一二面校招面经
java·后端