iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 10
3

先來碎碎念一下,昨天gitpage一直有問題,害我git push好幾次,後來發現repo裡的文件是新的沒錯,今天一看又好了,真是的浪費我快30分鐘

今天來講講SignalR的組態設定,組態有分Server組態和用戶組態2種,就來看看怎麼設定吧!

Server組態設定

主要在Starup.cs裡面設定,可以對全部Hub設定,也能只對一個Hub設定。

全部Hub設定

services.AddSignalR(options =>
{
    options.HandshakeTimeout = TimeSpan.FromMinutes(3);
    options.KeepAliveInterval = TimeSpan.FromHours(1);
    options.EnableDetailedErrors = true;
});

單一Hub設定

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.HandshakeTimeout = TimeSpan.FromMinutes(3);
    options.KeepAliveInterval = TimeSpan.FromHours(1);
    options.EnableDetailedErrors = true;
});

可設定變數

名稱 解釋
HandshakeTimeout 初次建立連線的時間,超過時間User端都沒回應會建立連線失敗,其實這命名正是WebSocket的握手,時間使用TimeSpan設定
KeepAliveInterval 無傳送訊息持,會ping Server以保持連線的時間,一樣使用TimeSapn設定
EnableDetailedErrors 是否顯示錯誤詳細狀況,預設是false,建議只有開發時打開就好

傳輸和記憶體緩衝相關設定

這邊文件寫得不太清楚,文件只說設定會傳到委派MapHub,後來實際做時發現MapHub原來有2個變數,一個就是傳入HttpConnectionDispatcherOptions的設定,設定方法一樣是Starup.cs裡面,大概像下面這樣

routes.MapHub<ChatHub>("/chatHub", options =>
{
    options.WebSockets.CloseTimeout = TimeSpan.FromMilliseconds(500);
    options.ApplicationMaxBufferSize = 0;
    options.TransportMaxBufferSize = 0;
}

選項很多請看結尾的的官方文件

用戶端組態設定

在用戶端部分有分成.NETJS2種,.NET版文件在MSDN文件是用WPF當範例,因為他不跨平台,所以這邊先不介紹。

JS用戶端

設定方式是在建立後的HubConnection,在物件屬性中直接設定,例如像下面這段程式碼。

var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();

connection.serverTimeoutInMilliseconds = 500; // 設定500毫秒無回應,切斷連線

或是從一開始建立就設定好也行

var connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub", {
        serverTimeoutInMilliseconds: 500
    })
    .build();

可以設定的選項如下

名稱 解釋
serverTimeoutInMilliseconds 連線無回應的時間限制
accessTokenFactory 驗證用的Bearer Token
skipNegotiation 跳過交涉的步驟,只支援WebSocket傳輸時

註:.NET用戶端可以設定很多,不知為什麼JS用戶端只有3個...

今天大概這些啦,MSDN文件感覺很多寫的太簡單,而且又是機器翻譯,實在是看不太懂....

無聊的概念大概都講完了,明天就要開始實作吧!!

參考

本文同步發表到個人BLOG


上一篇
09. 使用MessagePack傳輸更小的資料
下一篇
11. 實作一個連線名單
系列文
來玩玩即時互動App吧! ASP.NET Core SignalR30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言