如何使用SQL Server實現SignalR的橫向擴展


一般來說,Web應用的擴展有兩種:scale up(縱向擴展)和scale out(橫向擴展)。

1、縱向擴展

使用配置高(大內存,多處理器)的服務器或者虛擬機。

2、橫向擴展

使用多個服務器(Web Farm)。

SignalR支持橫向擴展,可以通過Backplanes(Azure Service Bus、Redis、SQL Server)來實現。

比如SignalR實現的一個簡單的聊天頁面, 部署到一個服務器,http://192.168.0.1/index.html。打開多個網頁訪問這個地址,任意頁面輸入的消息同時出現在各個頁面上。

如果部署到另一個服務器http://192.168.0.2/index.html,一個網頁打開http://192.168.0.1/index.html,另一個網頁打開http://192.168.0.2/index.html。分別發送消息,卻發現沒有同步。因為SignalR不支持不同服務器上的客戶端之前通信。即使部署在同一個服務器端的不同端口,不同端口的頁面間消息也不可以傳遞。

下面介紹如何使用SQL Server實現不同服務器上同一套Web應用間的消息傳遞。只需在SignalR實現的一個簡單的聊天頁面的Startup.cs添加兩行代碼(第5、6行)。

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            string sqlConnectionString = WebConfigurationManager.ConnectionStrings["signalr"].ConnectionString;
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
            app.MapSignalR();
        }
    }

添加代碼之前,需要NuGet安裝Microsoft.AspNet.SignalR.SqlServer並在Web.Config中配置數據庫連接字符串。

重新編譯然后部署到兩個服務器。http://192.168.0.1/index.html和http://192.168.0.2/index.html之間就可以通信了。

您可以用SQL Server Management Studio打開對應的數據庫,可以SignalR在數據庫里做了些什么。

 

本文如有不妥之處,請見諒!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM