因為將signalr作為單獨的站點,此處需要建立兩個項目,一個專門用於signalr作為推送項目,一個客戶端(實際的業務項目)
基礎知識速覽
Clients對象屬性
屬性 | 描述 |
---|---|
All | 在所有連接的客戶端上調用方法 |
Caller | 在調用集線器方法的客戶端上調用方法 |
Others | 除當前連接外的所有連接 |
Clients對象方法
方法 | 描述 |
---|---|
AllExcept | 在所有連接的客戶端(指定的連接除外)上調用方法 |
Client | 在特定連接的客戶端上調用方法(單個) |
Clients | 在特定連接的客戶端上調用方法(多個) |
Group | 對指定組中的所有連接調用方法 |
GroupExcept | 對指定組中的所有連接調用方法,指定的連接除外 |
Groups | 在多組連接上調用方法 |
OthersInGroup | 對一組連接調用方法,而不包括調用該集線器方法的客戶端 |
User | 對與特定用戶關聯的所有連接調用方法 |
Users | 對與指定用戶相關聯的所有連接調用方法 |
Signalr推送端
-
通過命令行或者vs 2019新建.netcore web項目,選擇.net core 3.0、webapi
-
建立一個Hub
public class NotifyHub : Hub { }
-
修改Startup中的ConfigServices方法,注冊對應的服務
// 添加Signalr services.AddSignalR(config => { // _webEnv為通過依賴注入在Startup的構造函數中注入的 IWebHostEnvironment if (_webEnv.IsDevelopment()) { config.EnableDetailedErrors = true; } });
-
修改Configure配置HTTP請求的管道
... app.UseRouting(); app.UseEndpoints(endpoints =>{ endpoints.MapHub<NotifyHub>("/notify-hub"); });
業務端
- 創建連接對象
var connection=new signalR.HubConnectionBuilder() .configureLogging(signalR.LogLevel.Error) // 前端控制台的日志級別,根據需要配置 .withUrl('http://localhost:50001/notify-hub') // 連接地址,這個地址是signalr項目的地址 .withAutomaticReconnect([0, 2000, 5000, 10000, 20000]) // 配置重連的時間 .build(); // 重連的時候觸發 connection.onreconnecting(function (info) { console.info('----------------------------------signalr-- onreconnecting', info); }); //連接關閉的回調 connection.onclose(function (err) { console.info('--------------------------------signalr-- onclose', err); }); connection.start().then(function (data) { console.log('已成功連接到signalr服務器') }).catch(function (error) { console.error(error.toString()); });
更多內容請通過快速導航查看下一篇
快速導航
標題 | 內容 |
---|---|
索引 | .net core 3.0 Signalr - 實現一個業務推送系統 |
下一篇 | .net core 3.0 Signalr - 02 使用強類型的Hub |
源碼地址 | 源碼 |
官方文檔 | 官方文檔 |