对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