Signalr系列之虚拟目录详解与应用中的CDN加速实战
对SignalR不了解的人可以直接移步下面的目录
前段时间一直有人问我 在用SignalR 2.0开发客服系统[系列1:实现群发通讯]这篇文章中的"/Signalr/hubs"这个虚拟目录到底是做什么的?
由于小弟当时也是一知半解所以很牵强,这段时间特意抽空详细了解了一番,分享如下:
前面我们一直都说这个是一个虚拟目录,那么这个东西到底是来做什么的呢?
我们先解释一下:这个路径前面的/Signalr/是目前你所有的SignalR的Hub在客户端连接时所访问的服务地址,后面的"/hubs"则是将要下载的前端JS资源,当我们在Startup类中app.MapSignalR()注册SignalR的时候,这个地址将自动注册,当然也可以改成自定义的代码(对应的前端JS地址也需要更改为""GoJJSMD/hubs"")如下:
public class OwinStartup
{
public void Configuration(IAppBuilder app)
{
//注册地址为"GoJJSMD"
app.MapSignalR("/GoJJSMD", new HubConfiguration());
}
}
效果如下:

看到这里,大家应该已经很明确了,其实就是在SignalR在收到第一个URL请求的时候会根据hub中的代码动态的创建一个JS脚本放在这个目录里面(注:这种动态创建只会在第一次访问时发生一次),
如下图,我们可以看到我们在Hub中所写的方法全部在自动生成的Hub.js中有代理项:

说到这里,大家应该很明确了,这个虚拟目录的作用其实就是在程序第一次被访问的时候自动根据被访问的Hub动态生成的JS脚本所存放的地方.
这样还是会有弊端,比如:生成的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
Signalr系列之虚拟目录详解与应用中的CDN加速实战的更多相关文章
- linux基础之LSB定义的常用目录详解
Linux基础之LSB定义的基本目录详解 1.LSB中FHS(Filesystem Hierarchy Standard)定义的一些文件 /boot:主要是存放引导文件的目录,比如内核文件(vmlin ...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- jdk目录详解及其使用方法
jdk目录详解 jdk目录详解 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境.它由一个处于操作系统层之上的 ...
- Server.MapPath()目录详解
最近在做相关的开发,碰到了Server.MapPath(),顺便来温习一下 Server.MapPath()获取网站的目录详解 ./当前目录 /网站主目录 ../上层目录 ~/网站虚拟目录 如果当前 ...
- 虚拟DOM详解
虚拟DOM简介 Virtual Dom可以看做一棵模拟了DOM树的JavaScript对象树,其主要是通过vnode,实现一个无状态的组件,当组件状态发生更新时,然后触发Virtual Dom数据的变 ...
- Linux and Oracle常用目录详解
目录详解 目录 内容 / 根目录,一切从这里开始 /bin 包含系统启动和运行所必需的二进制文件(程序) /boot 包含Linux内核.最初的RAM磁盘映像(系统启动时,驱动程序会用到),以及启动加 ...
- Linux /proc目录详解
Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过 ...
- 9.proc目录下的文件和目录详解
1./proc目录下的文件和目录详解 /proc:虚拟目录.是内存的映射,内核和进程的虚拟文件系统目录,每个进程会生成1个pid,而每个进程都有1个目录. /proc/Version:内核版本 /pr ...
- Hexo系列(三) 常用命令详解
Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...
随机推荐
- 转:聊聊mavenCenter和JCenter
Gradle支持从maven中央仓库和JCenter上获取构件,那这两者有什么区别呢? maven中央仓库(http://repo1.maven.org/maven2/)是由Sonatype公司提供的 ...
- ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上,不过我们依然有必要以代码实现的角度来介绍一下这个中 ...
- 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案
相信很多小伙伴都在android开发中遇到调用jni的各种巨坑,因为我们不得不在很多地方用到第三方库so文件,然而第三方官方通常都只会给出ADT环境下的集成方式,而谷歌亲儿子android studi ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- yaf的简单入门
1.目录结构: 2.入口文件 入口文件是所有请求的入口,一般都借助于rewrite规则,把所有的请求都重定向到这个入口文件. 一个经典的入口文件 public/index.php 3.重写规则 需要 ...
- 设计模式C#合集--单例模式
单例模式 代码: 第一种: private static Singleton singleton = null; private Singleton() { } public static Singl ...
- BPM配置故事之案例4-子表
公司渐渐对采购管理重视起来了,新招聘了采购主管老李,老李对现有的申请表很不满意,要求将申请物资和申请原因改成物资明细表 物资明细表 小明只好继续致电大毛-- 大毛:把申请物资和申请原因删掉,新增一个数 ...
- ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)
前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...
- C 盘的不速之客
C 盘的报告内容既然上GB的空间 操作系统版本 原来是微软这个查找解决异常关闭解决方案生成的报告 参考 How To Disable Vista Error Reporting Feature ...
- 闭区间套定理(Nested intervals theorem)
① ②这里用到了极限与不等关系 ③如果a≠b,那么便不会有$\lim _{n\rightarrow \infty }\left| I_n \right| =0$ ④如果还存在一点c在内,那么同样也不会 ...