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

注意参数要与后端对应

测试

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

相关推荐
九圣残炎33 分钟前
【springboot】简易模块化开发项目整合Redis
spring boot·redis·后端
.生产的驴1 小时前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
爱学的小涛1 小时前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
爱学的小涛1 小时前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
北极无雪1 小时前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
爱码少年1 小时前
springboot工程中使用tcp协议
spring boot·后端·tcp/ip
2401_857622669 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589369 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
哎呦没10 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch11 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j