C#使用SignalR实现与前端vue实时通信的示例代码

 更新时间:2024年10月14日 10:02:57   作者:敲厉害的燕宝  
SignalR 是 ASP.NET Core 的一个库,它简化了在应用程序中添加实时通信的过程,无论是聊天应用、实时游戏还是协作工具,SignalR 都能提供高效且易于实现的解决方案,本文给大家介绍了C#使用SignalR实现与前端vue实时通信的实现,需要的朋友可以参考下

C#后端

1、安装SignalR包

首先确保项目中已安装 SignalR 相关包。可以通过 NuGet 包管理器安装:

dotnet add package Microsoft.AspNetCore.SignalR

2、配置SignalR

在 Startup.cs 文件中配置 SignalR

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
 
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR();
    }
 
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
 
        app.UseRouting();
 
        app.UseEndpoints(endpoints =>
                         {
                             endpoints.MapHub<ChatHub>("/chatHub");
                         });
    }
}

3、创建Hub类

创建一个msgHub类来处理客户端的连接和消息传递

using Microsoft.AspNetCore.SignalR;
 
public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
 
 
 
 
 /// <summary>
 /// 将客户端加入指定分组
 /// </summary>
 /// <param name="groupName"></param>
 /// <returns></returns>
 public async Task JoinGroup(string groupName)
 {
     // 将客户端加入指定分组
     await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
    
 
 }
 /// <summary>
 /// 将客户端从指定分组移出
 /// </summary>
 /// <param name="groupName"></param>
 /// <returns></returns>
 public async Task LeaveGroup(string groupName)
 {
     await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);
    
 
 }
 /// <summary>
 ///  分组发送消息
 /// </summary>
 /// <param name="user"></param>
 /// <param name="message"></param>
 /// <returns></returns>
 public async Task SendMessageToOneGroup( string user, object message)
 {
     await Clients.Group("One").SendAsync(HubsConstant.DisplayReceive, user, message);
 }
 
    
}

客户端Vue连接

1、安装依赖

确保你的 Vue.js 项目中安装了必要的依赖:

Vue.js:确保你有一个 Vue.js 项目。

SignalR 客户端库:安装 SignalR 客户端库。

可以通过 npm 安装 SignalR 客户端库:

npm install @microsoft/signalr

2、修改 src/main.js 文件

确保在 Vue.js 应用中全局引入 SignalR:

全局引用

import Vue from 'vue';
import App from './App.vue';
import { HubConnectionBuilder } from '@microsoft/signalr';
 
Vue.config.productionTip = false;
 
new Vue({
  render: h => h(App),
}).$mount('#app');
 
// 创建 SignalR 连接
let connection = new HubConnectionBuilder()
  .withUrl('http://localhost:5000/chatHub')
  .build();
 
connection.on('ReceiveMessage', (user, message) => {
  console.log(`${user}: ${message}`);
  // 更新 UI
});
 
connection.start().catch(err => console.error(err));

页面引用

import { HubConnectionBuilder } from '@microsoft/signalr';

3、页面index.vue使用

<template>
    
</template>
 
 
<script>
 
import { HubConnectionBuilder } from '@microsoft/signalr';
export default {
    name: "WebSocketTest",
    
  mounted() {
      this.start();
  },
  beforeDestroy() {
      this.leaveGroup();
  },
    methods: {
      async start() {
        try {
          this.connection = new HubConnectionBuilder()
              .withUrl('http://localhost:8888/msgHub')
              .configureLogging(1)
              .build();
 
          // 处理连接状态变化
          this.connection.onclose(async () => {
            await this.start();
          });
 
          // 监听服务器发送的消息
          this.connection.on('DisplayReceive', (user, message) => {
            console.log('Received message:', user, message);
           
           
          await this.connection.start();
          console.log('Connection started');
 
          // 加入分组
          await this.connection.invoke('JoinGroup', 'One').catch(err => console.error('Error joining group:', err));
        } catch (err) {
          console.error('Error while starting connection:', err);
          setTimeout(() => this.start1(), 5000);
        }
      },
      
      async leaveGroup() {
          //移出分组
        await this.connection.invoke('LeaveGroup', 'One').catch(err => console.error('Error leaving group:', err));
        await this.connection.stop();
        },
     
 
    
    }
}
</script>

以上就是C#使用SignalR实现与前端vue实时通信的示例代码的详细内容,更多关于C# SignalR与Vue通信的资料请关注脚本之家其它相关文章!

相关文章

  • C# wpf Bitmap转换成WriteableBitmap的方法

    C# wpf Bitmap转换成WriteableBitmap的方法

    本文主要介绍了C# wpf Bitmap转换成WriteableBitmap的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 如何在C#中使用OpenCV(GOCW使用教程)

    如何在C#中使用OpenCV(GOCW使用教程)

    这篇文章主要介绍了如何在C#中使用OpenCV(GOCW使用教程),帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-12-12
  • 基于C#实现的敏感字检测示例

    基于C#实现的敏感字检测示例

    这篇文章主要介绍了基于C#实现的敏感字检测示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • C#代码实现短信验证码接口示例

    C#代码实现短信验证码接口示例

    这篇文章主要为大家详细介绍了C#实现短信验证码接口示例代码,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • C# DialogResult用法案例详解

    C# DialogResult用法案例详解

    这篇文章主要介绍了C# DialogResult用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C#前端验证和后台验证代码实例

    C#前端验证和后台验证代码实例

    这篇文章主要介绍了C#前端验证和后台验证代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 游戏开发之随机概率的选择算法

    游戏开发之随机概率的选择算法

    这篇文章主要介绍了游戏开发之随机概率的选择算法,需要的朋友可以参考下
    2015-07-07
  • WinForm实现自定义右下角提示效果的方法

    WinForm实现自定义右下角提示效果的方法

    这篇文章主要介绍了WinForm实现自定义右下角提示效果的方法,涉及WinForm自定义提示效果的实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • 判断图片-判断位图是否是黑白图片的方法

    判断图片-判断位图是否是黑白图片的方法

    近来工作需要判断图片否是是彩色的,由于是十万张以上的大批量理处,所以通过序程来动自判断。
    2013-05-05
  • C#并发编程之Task类详解

    C#并发编程之Task类详解

    Task是建立在线程池之上的一种多线程技术,它的出现使Thread成为历史。其使用方法非常简单,本文就来通过几个示例为大家讲讲它的具体使用吧
    2023-03-03

最新评论