對SignalR不瞭解的人能夠直接移步下面的目錄html
前段時間一直有人問我 在用SignalR 2.0開發客服系統[系列1:實現羣發通信]這篇文章中的"/Signalr/hubs"這個虛擬目錄究竟是作什麼的?jquery
因爲小弟當時也是隻知其一;不知其二因此很牽強,這段時間特地抽空詳細瞭解了一番,分享以下:
app
前面咱們一直都說這個是一個虛擬目錄,那麼這個東西究竟是來作什麼的呢?工具
咱們先解釋一下:這個路徑前面的/Signalr/是目前你全部的SignalR的Hub在客戶端鏈接時所訪問的服務地址,後面的"/hubs"則是將要下載的前端JS資源,當咱們在Startup類中app.MapSignalR()註冊SignalR的時候,這個地址將自動註冊,固然也能夠改爲自定義的代碼(對應的前端JS地址也須要更改成""GoJJSMD/hubs"")以下:
post
public class OwinStartup { public void Configuration(IAppBuilder app) { //註冊地址爲"GoJJSMD" app.MapSignalR("/GoJJSMD", new HubConfiguration()); } }
效果以下:優化
看到這裏,你們應該已經很明確了,其實就是在SignalR在收到第一個URL請求的時候會根據hub中的代碼動態的建立一個JS腳本放在這個目錄裏面(注:這種動態建立只會在第一次訪問時發生一次),ui
以下圖,咱們能夠看到咱們在Hub中所寫的方法所有在自動生成的Hub.js中有代理項:url
說到這裏,你們應該很明確了,這個虛擬目錄的做用其實就是在程序第一次被訪問的時候自動根據被訪問的Hub動態生成的JS腳本所存放的地方.spa
這樣仍是會有弊端,好比:生成的JS沒有進行優化處理(去除空格多餘的字符串什麼的),也沒法進行CDN加速..
那麼,做爲一個高端大氣上檔次的應用程序,在用戶日益暴增的今天,在必須裝逼裝到位的當下!,必須使用CDN對本身的JS下載進行優化,是吧.(- -,哈哈哈...)
接下來咱們就講講如何進行CDN加速
上面咱們說過,這些JS都是自動生成,因此進行JS的最小化優化和CDN加速的時候就很困難.
那麼有沒有辦法讓這些JS手動生成,而且由咱們來進行控制呢?答案是確定的~
Signalr提供了手動生成的工具,須要Nuget下載,
在Nuget命令行中輸入以下命令:
Install-Package Microsoft.AspNet.SignalR.Utils
下載最新版本的Utils工具包
而後咱們輸入命令:
signalr ghp /path:SignalRApplication_Test/bin /o:SignalRApplication_Test/scripts/hubs.js
注意標紅的地方,改成你本身的應用程序名稱
這樣咱們就能夠在Scripts/目錄下看到一個叫hubs.js的文件了,以下圖:
能夠打開看看和以前自動生成的是一毛同樣的.
那麼這個JS怎麼使用呢?
咱們先修改前端的引用代碼,以下:
<script src="Scripts/jquery-1.10.2.min.js"></script> <script src="Scripts/jquery.signalR-2.2.0.min.js"></script> <script src="Scripts/hubs.js"></script> <!--這裏咱們註釋掉--> <!--<script src="GoJJSMD/hubs"></script>-->
把虛擬目錄註釋掉,而後引入咱們剛剛生成的Hub.js
接下來,修改Startup類中的配置以下:
public class OwinStartup { public void Configuration(IAppBuilder app) { //配置自動生成JS代理爲否 app.MapSignalR(new HubConfiguration() { EnableJavaScriptProxies = false }); } }
而後訪問頁面,會發現和以前的效果沒有任何區別,這樣就完成了對虛擬目錄的替換工做.
既然已經得到了JS,那麼得到JS以後,如何進行CDN加速如何進行優化...我就不談了..大家懂的..
雖然到此,咱們就已經能夠進行本身的CDN加速了可是在開發的過程當中,仍是會很麻煩,每次修改hub都須要手動生成一次hubs.js
有沒有簡便的方法呢?,那必須的..
咱們在項目目錄下找找..
會發現以下程序:
在packages下找到SignalR.Utils中的tools裏面有一個signalr的exe程序,這個就是生成Hubs.js的小工具啦~
爲了簡便,咱們把他複製出來,放在項目中的signalr目錄下,如圖:
而後咱們在應用程序上,右鍵,屬性,以下:
選擇生成事件,點擊編輯後期生成事件,以下圖:
輸入以下命令行:
$(ProjectDir)signalr\signalr.exe ghp path:$(TargetDir) /o:$(ProjectDir)Scripts/hubs.js
這樣咱們每當咱們從新生成或者編譯的時候就會自動更新Scripts下的hubs.js了..
至此,詳解完畢..
其實SignalR的功能不只限於聊天,多是國內的實例都是聊天的Demo因此有點限制你們的思惟,你們能夠想一想,Signalr的時效性,其實還能夠作事實的項目監控,同步的畫板,甚至在HTML5下理論上徹底是能夠實現視頻聊天的,但願你們多多支持小弟,謝謝,若是喜歡或者以爲有用,能夠點一個贊,同時也歡迎大神吐槽.!小弟的Q:524808775