標籤:-o 中介軟體 top stc ott href ref cat 串連
持久串連類
通過SignalR持久串連類可以快速的構建一個即時通訊的應用,上篇博文已經我們建立一個owin Startup類和一個持久串連類來完成我們的工作,然後在Startup類的Configuration方法中添加了我們的中介軟體,配置名稱 myconnection1
簡單看一下持久串連類,裡面有四個可供我們重寫的方法,從字面上就可以看出是什麼意思,需要一提的是持久串連類是享元模式的實踐,因為一個用戶端和伺服器的串連過程中只會建立一個對象,後面都不會再建立對象。
在調試視窗也可以看到我們的WriteLine資訊
下面需要說一下兩個參數
request
connectionid
connectionId是一個類似GUID一樣的唯一標識,一個用戶端的串連會有一個這樣的串連Id
Request則是一些瀏覽器發來的報文以及一些其它的資訊
下面可以看深入一下持久串連類的源碼,可以看到參數 environment 是一個字典,這是owin的規範
public Task ProcessRequest(IDictionary<string, object> environment) { HostContext context = new HostContext(environment); environment.DisableRequestCompression(); environment.DisableResponseBuffering(); OwinResponse response = new OwinResponse(environment); response.get_Headers().Set("X-Content-Type-Options", "nosniff"); if (this.Authorize(context.Request)) { return this.ProcessRequest(context); } if ((context.Request.User != null) && context.Request.User.Identity.IsAuthenticated) { response.set_StatusCode(0x193); } else { response.set_StatusCode(0x191); } return TaskAsyncHelper.Empty; }
最後會走到這個方法到達我們的OnConnected事件裡
private Task ProcessStartRequest(HostContext context, string connectionId) { return this.OnConnected(context.Request, connectionId).OrEmpty().Then<HostContext>(((Func<HostContext, Task>) (c => SendJsonResponse(c, "{ \"Response\": \"started\" }"))), context).Then<IPerformanceCounterManager>(delegate (IPerformanceCounterManager c) { c.ConnectionsConnected.Increment(); }, this.Counters); }
Asp.Net SignalR - 持久串連類