這里去掉“使用控制器”來構(gòu)建最小API服務(wù)。

最后點擊【創(chuàng)建】。

2、在項目中安裝 SignalR 包

使用 NuGet 包管理器 UI 通過搜索“SignalR”,找到“Microsoft.AspNetCore.SignalR”安裝

當(dāng)然,也可以通過NuGet 包管理器控制臺來通過命令安裝:

Install-Package Microsoft.AspNetCore.SignalR

3、在啟動文件Program.cs中添加?SignalR 服務(wù)

builder.Services.AddSignalR();

4、創(chuàng)建Hub類?SignalRHub.cs

using Microsoft.AspNetCore.SignalR;

namespace SignalRApi
{
public class SignalRHub : Hub
{
/// <summary>
/// 發(fā)布學(xué)生成績
/// </summary>
/// <param name="name">學(xué)生姓名</param>
/// <param name="score">得分</param>
/// <param name="msg">備注</param>
/// <returns></returns>
public async Task SendMessage(string name, int score, string msg)
{
await Clients.All.SendAsync("ReceiveScore", name, score, msg);
}
public override async Task OnConnectedAsync()
{
string connectionId = Context.ConnectionId;
await base.OnConnectedAsync();
}
}
}

5、創(chuàng)建后臺服務(wù)持續(xù)推送消息類 WorkerService.cs 

具體業(yè)務(wù)邏輯代碼:

using Microsoft.AspNetCore.SignalR;

namespace SignalRApi
{
public class WorkerService : BackgroundService
{
private readonly IHubContext<SignalRHub> _signalRHub;

public WorkerService(IHubContext<SignalRHub> signalRHub)
{
_signalRHub = signalRHub;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
try
{
Console.WriteLine($"{DateTime.Now}:服務(wù)已啟動");
Random rnd = new Random();
int score = rnd.Next(60, 100);
string[] students = { "段譽", "蕭峰", "虛竹", "阿朱", "阿紫", "王語嫣", "木婉清", "鐘靈", "阿碧", "慕容復(fù)", "段正淳", "鳩摩智" };
var name = students[rnd.Next(0, students.Length)];
await _signalRHub.Clients.All.SendAsync("ReceiveScore", name, score, $"{name}的成績是{score}");
Console.WriteLine($"{DateTime.Now}:發(fā)布成績:{name}獲取{score}分");
await Task.Delay(4000, stoppingToken);
}
catch (Exception ex)
{
Console.WriteLine($"服務(wù)異常:{ex.Message}");
}
}
}
}
}

6、最后,需要在Program.cs中映射 SignalRHub 以及添加后臺服務(wù)

builder.Services.AddHostedService<WorkerService>();

app.MapHub<SignalRHub>("/hubs/score");

啟動項目,查看效果:

SignalR服務(wù)端搭建完畢,接下來,實現(xiàn)SignalR的客戶端,用控制臺程序?qū)崿F(xiàn)。

創(chuàng)建 SignalR 客戶端

1、創(chuàng)建控制臺應(yīng)用程序

同樣的方法安裝SignalR客戶端包【Microsoft.AspNetCore.SignalR.Client】,

在Program.cs中添加代碼:

using Microsoft.AspNetCore.SignalR.Client;
//here is SignalR Sender URL
string hubUrl = "http://localhost:5000/hubs/score";
var hubConnection = new HubConnectionBuilder().WithUrl(hubUrl).Build();

// Register a handler for messages from the SignalR hub
// "ReceiveStockPrice" is the topic to which SignalR sending the singnals
hubConnection.On<string, int, string>("ReceiveScore", (name, score, msg) =>
{
Console.WriteLine($"接收消息--> 學(xué)生:{name} 成績:{score} 備注:{msg}");
});

try
{
// Start the connection
hubConnection.StartAsync().Wait();
Console.WriteLine("SignalR 已連接到服務(wù)器");
}
catch (Exception ex)
{
Console.WriteLine($"SignalR 連接服務(wù)異常:{ex.Message}");
throw;
}
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
var cancellationToken = cancellationTokenSource.Token;
Console.CancelKeyPress += (sender, a) =>
{
a.Cancel = true;
Console.WriteLine("SignalR 停止連接");
cancellationTokenSource.Cancel();
};
try
{
await Task.Delay(Timeout.Infinite, cancellationToken);
}
catch (TaskCanceledException)
{
}
await hubConnection.StopAsync();

Console.WriteLine("SignalR 連接已關(guān)閉");

啟動項目,查看效果:

本文章轉(zhuǎn)載微信公眾號@武穆逸仙

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業(yè)工程師共享工作效率翻倍的秘密
熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
返回頂部
上一篇
.NET REST API 中的序列化和反序列化
下一篇
用ASP.NET Core 2.1 建立規(guī)范的 REST API -- 緩存和并發(fā)
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
亚洲制服丝袜在线| 欧美人狂配大交3d怪物一区| 亚洲午夜久久久久久久久久久 | 污片在线观看一区二区| 国产色一区二区| 欧美韩国一区二区| 久久国产人妖系列| 一本色道久久加勒比精品| 国产亚洲女人久久久久毛片| 青青草一区二区三区| 欧美日韩一区二区三区在线| 国产精品久久久久影视| 国产精选一区二区三区| 91精品国产一区二区三区香蕉 | 久久久久久一二三区| 国产精品综合二区| 宅男噜噜噜66一区二区66| 亚洲一区二区三区精品在线| 99国产精品久久久| 欧洲视频一区二区| 日韩在线a电影| 欧美国产综合色视频| 91在线免费播放| 国产精品久久久久久久久晋中 | 亚洲成人激情av| 日本精品一区二区三区四区的功能| 中文字幕亚洲成人| 色婷婷精品久久二区二区蜜臀av| 国产精品第四页| 91丝袜美腿高跟国产极品老师| 亚洲在线一区二区三区| 国产乱子伦视频一区二区三区| 欧美酷刑日本凌虐凌虐| 日产国产欧美视频一区精品| 欧美在线免费观看视频| 成人午夜视频在线| www.亚洲人| 国产a视频精品免费观看| 亚洲欧洲日韩在线| 国产精品免费aⅴ片在线观看| 91首页免费视频| 欧美色图天堂网| 欧美性猛交xxxx乱大交退制版 | 91精品国产综合久久福利| 欧美www视频| 亚洲精品综合在线| 石原莉奈一区二区三区在线观看| 免费观看在线综合| 麻豆精品在线观看| av在线一区二区| 精品国产伦理网| 亚洲午夜日本在线观看| 日韩黄色小视频| 一道本成人在线| 精品sm在线观看| 亚洲宅男天堂在线观看无病毒| 国产精品久久久久久久久免费樱桃 | 91性感美女视频| 欧洲av一区二区嗯嗯嗯啊| 日韩精品影音先锋| 亚洲成av人影院| 豆国产96在线|亚洲| 精品成a人在线观看| 精品一区二区三区免费| 91网站最新网址| 国产精品毛片无遮挡高清| 香蕉久久一区二区不卡无毒影院| 国产91高潮流白浆在线麻豆| 欧美亚洲丝袜传媒另类| 亚洲一区在线观看视频| 国产在线精品免费av| 精品国产一区二区亚洲人成毛片| 欧美一二三四区在线| 美女看a上一区| 欧美影院午夜播放| 水野朝阳av一区二区三区| 777a∨成人精品桃花网| 亚洲成av人**亚洲成av**| 91国内精品野花午夜精品| 亚洲国产精品人人做人人爽| 欧美日韩视频在线观看一区二区三区 | 亚洲午夜av在线| 欧美zozo另类异族| 国产精品一区三区| 亚洲精品一二三区| 欧美日韩亚洲不卡| 国产二区国产一区在线观看| 欧美激情一区二区三区在线| 日本乱码高清不卡字幕| 日本道在线观看一区二区| 麻豆国产一区二区| 99re亚洲国产精品| 免费久久99精品国产| 日本一区二区视频在线观看| 粗大黑人巨茎大战欧美成人| 一区二区三区精品在线| 国产露脸91国语对白| 午夜精品久久久久久久99水蜜桃 | 婷婷开心久久网| 亚洲色图欧洲色图| 精品国产欧美一区二区| 欧美在线免费观看亚洲| 久久国产精品第一页| 精品影视av免费| 国产做a爰片久久毛片| 日本午夜一本久久久综合| 精品国产精品一区二区夜夜嗨| 99精品国产99久久久久久白柏| 日本最新不卡在线| 欧美va亚洲va在线观看蝴蝶网| 制服丝袜亚洲播放| 欧美乱熟臀69xxxxxx| 色婷婷国产精品| 成人av先锋影音| 国产精品一级二级三级| 一区二区三区在线看| 久久人人爽人人爽| 中文字幕精品在线不卡| 国产精品久久久久桃色tv| 欧美色图片你懂的| 久久久亚洲综合| 亚洲人亚洲人成电影网站色| www.欧美日韩| 老司机午夜精品99久久| 夜夜嗨av一区二区三区中文字幕| 亚洲你懂的在线视频| 国产精品免费视频网站| 亚洲精品日韩专区silk| 一区二区三区四区激情 | 亚洲欧洲av另类| 一区二区免费看| 丝袜美腿亚洲一区| 精品在线亚洲视频| 麻豆精品国产传媒mv男同| 一本色道亚洲精品aⅴ| 7777精品伊人久久久大香线蕉 | 亚洲精品乱码久久久久久久久 | 亚洲乱码国产乱码精品精可以看 | 7777精品伊人久久久大香线蕉| 欧美美女激情18p| 中文字幕第一区| 欧美aaa在线| www.成人网.com| 日韩精品一区二区在线| 亚洲色大成网站www久久九九| 中文字幕一区二区三区四区| 免费在线成人网| 欧美日韩国产系列| 日韩免费性生活视频播放| 日韩视频中午一区| 午夜亚洲福利老司机| 久久99久久久久久久久久久| 在线观看亚洲一区| 亚洲视频在线一区| 国产高清一区日本| 91啦中文在线观看| 亚洲欧美欧美一区二区三区| 91美女福利视频| 欧美性受xxxx| 亚洲一区视频在线观看视频| 99精品久久免费看蜜臀剧情介绍 | 国产在线播放一区二区三区| 欧美女孩性生活视频| 亚洲高清不卡在线| 国产肉丝袜一区二区| 日韩精品乱码av一区二区| 日韩限制级电影在线观看| 美女网站一区二区| 久久色在线观看| 色哟哟国产精品| 国产一区二区91| 综合久久久久久| 欧美影视一区在线| 国产在线视视频有精品| 国产精品久久久久婷婷| 国产成人在线视频网站| 中文字幕中文字幕中文字幕亚洲无线 | 亚洲自拍偷拍九九九| 欧美日韩国产综合久久| 狠狠色狠狠色综合| 性久久久久久久久久久久| 色婷婷狠狠综合| 看国产成人h片视频| 亚洲精品国产品国语在线app| www.亚洲人| 亚洲女同一区二区| 亚洲裸体在线观看| 欧美性色综合网| 国产成人av影院| 一区二区三国产精华液| 在线观看91视频| 极品销魂美女一区二区三区| 亚洲444eee在线观看| 精品免费一区二区三区| 日韩你懂的在线观看| 欧美卡1卡2卡| 精品999久久久| 中文字幕精品一区二区三区精品| 精品乱码亚洲一区二区不卡| 精品剧情v国产在线观看在线|