最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

SignalR+Hangfire 實(shí)現(xiàn)后臺(tái)任務(wù)隊(duì)列和實(shí)時(shí)通訊

2023-06-07 00:15 作者:單純的饒同學(xué)  | 我要投稿

SignalR+Hangfire 實(shí)現(xiàn)后臺(tái)任務(wù)隊(duì)列和實(shí)時(shí)通訊


1.簡介:

SignalR是一個(gè).NET的開源框架,SignalR可使用Web Socket, Server Sent Events 和 Long Polling作為底層傳輸方式實(shí)現(xiàn)服務(wù)端和客戶端的實(shí)時(shí)數(shù)據(jù)交互。

Hangfire是一個(gè).NET的開源后臺(tái)任務(wù)框架 提供統(tǒng)一的編程模型,以可靠的方式處理后臺(tái)任務(wù)

2.目的:

通過SignalR+Hangfire,我們可以實(shí)現(xiàn)一些需要較長時(shí)間處理的任務(wù),并在完成及時(shí)的通知前端處理結(jié)果。

3.以下是我使用SignalR+Hangfire的開發(fā)需求:

在net6 webapi的情況下,前端是vue+ts,我現(xiàn)在有個(gè)需要就是,我寫了一個(gè)接口,是對接stable diffusion webui 文生圖的接口,前端第一個(gè)人請求,返回圖沒有問題,
但是,此時(shí)在生成圖的過程中,第二個(gè)人請求,我希望加入到一個(gè)隊(duì)列或者別的方式 ,把這個(gè)請求放著,我處理完第一個(gè)請求之后繼續(xù)處理第二個(gè),并且告訴用戶,前面有多少個(gè)任務(wù)需要等待?

我的開發(fā)環(huán)境,后端是.net7 前端vue3.0,下面是對應(yīng)安裝和使用教程:

1.Hangfire使用


1.安裝nuget包


由于我使用的mysql,對應(yīng)包為Hangfire.MySqlStorage,大家根據(jù)自己的數(shù)據(jù)庫選擇安裝對應(yīng)的包

2.添加Hangfire配置


Hangfire的數(shù)據(jù)是存在數(shù)據(jù)庫中的,所以在添加配置時(shí)候要使用對應(yīng)的數(shù)據(jù)庫連接字符串。同時(shí),在UseHangfireServer時(shí),我使用了自定義的隊(duì)列名稱,并將同時(shí)執(zhí)行的任務(wù)數(shù)設(shè)置為1,以實(shí)現(xiàn)任務(wù)隊(duì)列中的任務(wù)唯一,且任務(wù)依次執(zhí)行。

在program.cs中添加以下配置

1.添加Hangfire


代碼內(nèi)容:

2.應(yīng)用Hangfire



代碼內(nèi)容:

3.數(shù)據(jù)庫配置


配置完成,在使用時(shí),數(shù)據(jù)庫會(huì)生成Hangfire的工作表,如下:



4.Hangfire 控制面板

對應(yīng)Hangfire 控制面板為?/hangfire

http://localhost:5122/hangfire

1.儀表盤


2.隊(duì)列



5.代碼中的應(yīng)用

1.發(fā)起一個(gè)后臺(tái)任務(wù)

2.后臺(tái)任務(wù)方法

3.查詢隊(duì)列等待任務(wù)數(shù)

2.SignalR使用


1.后端SignalR使用


由于我使用的.net7,微軟自帶SignalR,我們使用時(shí)只需要添加引用

using Microsoft.AspNetCore.SignalR;

1.添加SignalR配置

在program.cs中添加以下配置

1.添加SignalR



代碼內(nèi)容:

// SignalR

services.AddSignalR();


2.配置SignalR hub



代碼內(nèi)容:


2.創(chuàng)建SignalR hub類

3.代碼中的應(yīng)用

1.依賴注入

通過依賴注入,在要使用的類中注入


2.發(fā)送消息

向全體發(fā)送

向指定客戶端發(fā)送

2.前端SignalR使用


前端我用的是VUE+TS

1.安裝SignalR包

通過命令使用?pnpm?安裝?@microsoft/signalr

2.頁面中引用@microsoft/signalr

3.創(chuàng)建一個(gè)useSignalR.ts

創(chuàng)建一個(gè)useSignalR.ts來專門處理SignalR消息,然后在需要用到的頁面中引用即可。

代碼內(nèi)容:

4.頁面中的使用

在需要使用signalR的頁面引用useSignalR

3.案例:SignalR+Hangfire+StableDiffusionAPI 生成圖片

Hangfire實(shí)現(xiàn)后臺(tái)調(diào)用StableDiffusion web接口,然后通過SignalR將結(jié)果返回給前端。這樣,對StableDiffusion web的性能要求很低。不會(huì)因?yàn)樯蓤D片慢,導(dǎo)致http請求超時(shí)的情況。大大改善了前后端交互。

1.前端建立SignalR

跟上述頁面中使用介紹的一樣,當(dāng)添加了

打開對應(yīng)頁面時(shí),就創(chuàng)建了SignalR的連接了。

2.前端發(fā)起請求


前端的提交按鈕對應(yīng)的方法,使用的是axios發(fā)送http請求生成圖片。

代碼如下:

3.后端接口和實(shí)現(xiàn)

后端接口和實(shí)現(xiàn)方法完成定時(shí)任務(wù)的發(fā)起和signalR的消息推送

后端接口如下:

方法實(shí)現(xiàn):

4.案例成果


案例地址(AI聊天+圖片生成):https://ai.terramours.site/



閱讀如遇樣式問題,請前往個(gè)人博客瀏覽:?https://www.raokun.top

擁抱ChatGPT:https://ai.terramours.site

開源項(xiàng)目地址:https://github.com/firstsaofan/TerraMours


SignalR+Hangfire 實(shí)現(xiàn)后臺(tái)任務(wù)隊(duì)列和實(shí)時(shí)通訊的評論 (共 條)

分享到微博請遵守國家法律
淮阳县| 出国| 长子县| 涿州市| 四川省| 朝阳区| 蒙城县| 昔阳县| 高青县| 珠海市| 双流县| 南昌县| 陆丰市| 成安县| 普洱| 安吉县| 县级市| 绵阳市| 宝兴县| 哈巴河县| 长顺县| 泾源县| 楚雄市| 固原市| 长海县| 石嘴山市| 策勒县| 习水县| 甘肃省| 博乐市| 林甸县| 平江县| 雷山县| 会东县| 绥德县| 乌鲁木齐县| 镇坪县| 周至县| 安多县| 凤庆县| 浠水县|