[桌邊服務] 關於 ASP.NET SignalR 連線數限制

twMVC#34 聽到一位朋友說他遇到 ASP.NET SignalR 有連線數 11 的限制,由於這位朋友沒有現身,不知道更詳細的情況,我就我之前遇到的情況跟各位朋友分享,ASP.NET SignalR 是會有連線數限制的情形,但這不是 ASP.NET SignalR 的問題。

ASP.NET SignalR 不是 Request and Response 的溝通模式,它會長期佔用伺服器的連線,而且是一個瀏覽器分頁就佔用一個連線,所以當我們發現使用 ASP.NET SignalR 的網頁開到某個數量再也開不了的時候,我們回頭查看一下我們的開發環境,連線數限制這件事情會跟我們的 Windows License 有關,底下有兩篇比較舊的文章給各位朋友參考:

我實驗的結果在 Windows 10 是這樣的,專業版(含)以上的版本連線數限制是 10,家用版則只有 3,如果連線數要無限制的話得用 Windows Server,雖然說用了 Server 版本就有無限制的連線數,但是硬體上包括網卡、防火牆、負載平衡器...等等,還是會有出現瓶頸的一天。

所以想像一下,假設我們整體的伺服器資源可以允許同時連線數 100 個好了,這 100 個連線資源讓使用者輪流使用,可以服務的使用者或許可以大於 100 個,但是如果服務是需要長期佔線的話,最高可服務的使用者就是 100 個,因此佔用伺服器的連線資源卻做很少的事,其實是很浪費的。

通常這種會長期佔線的服務最好另外部署在獨立的伺服器,如果一台不夠用需要多增加伺服器的時候,還得處理一下 Scale-out 的問題,幸好微軟推出了一個雲端服務 - Azure SignalR Service,這種維持長期連線的工作就可以交給它了,不需要再自己搞這些事情。

參考資料