C#使用SignalR實現(xiàn)與前端vue實時通信的示例代碼
C#后端
1、安裝SignalR包
首先確保項目中已安裝 SignalR 相關(guān)包。可以通過 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、創(chuàng)建Hub類
創(chuàng)建一個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>
/// 分組發(fā)送消息
/// </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 應(yīng)用中全局引入 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');
// 創(chuàng)建 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();
// 處理連接狀態(tài)變化
this.connection.onclose(async () => {
await this.start();
});
// 監(jiān)聽服務(wù)器發(fā)送的消息
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實現(xiàn)與前端vue實時通信的示例代碼的詳細內(nèi)容,更多關(guān)于C# SignalR與Vue通信的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#?wpf?Bitmap轉(zhuǎn)換成WriteableBitmap的方法
本文主要介紹了C#?wpf?Bitmap轉(zhuǎn)換成WriteableBitmap的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08

