SignalR 是 ASP.NET 团队正在开发的一个 Microsoft .NET Framework 库和 jQuery 插件,可能包括在以后版本的 ASP.NET 平台中。 它提供了一些前景极为光明的功能,而这些功能正是 .NET Framework 当前不曾具有的,并且是越来越多的开发者所需要的。
SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话。 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换;它将继续,直到明确关闭。 对话通过永久连接进行,允许客户端向服务器发送多个消息,并允许服务器做出相应答复,值得注意的是,还允许服务器向客户端发送异步消息。是一个完全基于客户及服务器端解决方案,它是以JS作为客户端和ASP.NET作为服务端来创建这类的应用。
有关SignalR的更多细节
SignalR在NuGet上被分成了几个包:
· SignalR – 主要的包,包括SignalR.Server和SignalR.Js(你应该安装这个)
· SignalR.Server – 服务器端组件用以创建SignalR端点
· SignalR.Js – SignalR的Javascript客户端
· SignalR.Client – SignalR的.NET客户端
· SignalR.Ninject - SignalR 的Ninject 相关解决方案
SignalR的系统要求等请参考:http://www.asp.net/signalr/overview/getting-started/supported-platforms
安装SignalR
Install-Package Microsoft.AspNet.SignalR
安装 Microsoft.Owin.Cors
Install-Package Microsoft.Owin.Cors
PM> Install-Package Microsoft.AspNet.SignalR
正在尝试收集与目标为“.NETFramework,Version=v4.5”的项目“SignalRDemo1”有关的程序包“Microsoft.AspNet.SignalR.2.2.0”的相关依赖项信息
正在尝试解析程序包“Microsoft.AspNet.SignalR.2.2.0”的依赖项,DependencyBehavior 为“Lowest”
正在解析操作以安装程序包“Microsoft.AspNet.SignalR.2.2.0”
已解析操作以安装程序包“Microsoft.AspNet.SignalR.2.2.0”
正在将程序包“Microsoft.AspNet.SignalR.JS.2.2.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.SignalR.JS.2.2.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.SignalR.JS.2.2.0”添加到“packages.config”
已将“Microsoft.AspNet.SignalR.JS 2.2.0”成功安装到 SignalRDemo1
正在将程序包“Microsoft.AspNet.SignalR.Core.2.2.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.SignalR.Core.2.2.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.SignalR.Core.2.2.0”添加到“packages.config”
已将“Microsoft.AspNet.SignalR.Core 2.2.0”成功安装到 SignalRDemo1
正在将程序包“Microsoft.AspNet.SignalR.SystemWeb.2.2.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.SignalR.SystemWeb.2.2.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.SignalR.SystemWeb.2.2.0”添加到“packages.config”
已将“Microsoft.AspNet.SignalR.SystemWeb 2.2.0”成功安装到 SignalRDemo1
正在将程序包“Microsoft.AspNet.SignalR.2.2.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.SignalR.2.2.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.SignalR.2.2.0”添加到“packages.config”
已将“Microsoft.AspNet.SignalR 2.2.0”成功安装到 SignalRDemo1
PM> Install-Package Microsoft.Owin.Cors
正在尝试收集与目标为“.NETFramework,Version=v4.5”的项目“SignalRDemo1”有关的程序包“Microsoft.Owin.Cors.3.0.1”的相关依赖项信息
正在尝试解析程序包“Microsoft.Owin.Cors.3.0.1”的依赖项,DependencyBehavior 为“Lowest”
正在解析操作以安装程序包“Microsoft.Owin.Cors.3.0.1”
已解析操作以安装程序包“Microsoft.Owin.Cors.3.0.1”
正在将程序包“Microsoft.AspNet.Cors.5.0.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.Cors.5.0.0”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.AspNet.Cors.5.0.0”添加到“packages.config”
已将“Microsoft.AspNet.Cors 5.0.0”成功安装到 SignalRDemo1
正在将程序包“Microsoft.Owin.Cors.3.0.1”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.Owin.Cors.3.0.1”添加到文件夹“M:\MvcSolution\SignalRDemo1\packages”
已将程序包“Microsoft.Owin.Cors.3.0.1”添加到“packages.config”
已将“Microsoft.Owin.Cors 3.0.1”成功安装到 SignalRDemo1
一、概述
ASP.NET signalr对ASP.NET开发者来说是一个新的程序库,它能让我们更加容易便捷地开发实时通信功能;
signalr允许客户端和服务器之间双向通信。服务器可以将内容推送到已连接的客户端。
signalr支持Web Sockets,遇到其他兼容旧的浏览器signalr会用其他技术支持”双向通信”(不要较真)。
signalr包括这些API:连接管理(例如,连接和断开连接的事件)、对连接分组、和访问功能授权。
二、认知随谈
signalr可以用来添加任何形式的“实时通信”功能到您的ASP.NET应用程序。聊天是经常被用来作为一个应用例子,当然你可以做更多的事情。
用户常常通过刷新网页来查看新数据,或者页面支持长轮询来检索新的数据,使用signalr机制中支持这个方式,但它更智能更强大友好。
SignalR同时支持新类型的网络应用情况:需要高频度从服务端更新的情况(如实时游戏、看看这个ShootR game.)
SignalR提供了更加便捷简单的API,
1.这些API可以用来创建服务端和客户端之间的远程调用.
服务端代码可以调用浏览器上的Javascript函数{包括其他的平台};
当然客户端也有可调用服务端的方法(这个大家好理解)
2.这些API可以:连接管理(例如,连接和断开连接的事件)、对连接分组、和访问功能授权。
这两幅图,描述了客户端和服务端之间的相互调用
三、进一步了解
signalr可以自动化处理连接管理,这可以让你在一个时间点广播消息到所有连接的客户端,
如同聊天室这样的情况。你也可以把消息发送给特定的客户。客户端和服务器之间的连接是持久的,不同于经典的HTTP连接需要重新建立各通信。
signalr支持“服务器推送”功能,如上图讲到的那样可以对客户端进行RPC调用,不同于大家熟知的应答模式
signalr是开源的,可以通过 GitHub 获取源码.
四、SignalR和WebSocket的关系
signalr会自动地使用websocket通信(只要条件允许),条件不满足的时候也会自动使用其他旧的传输方式。当然你可以直接让你的程序直接使用WebSocket.
使用signalr意味着原先你需要自己花精力做的工作不需要再自己做了,因为它已经为你做了。最重要的是,它会持续更新跟进WebSocket技术,所以你不用担心协议变化这类事情.
signalr是对客户端和服务器之间通信方式的一个抽象。一个signalr启动时使用HTTP连接,然后当环境允许就会直接提升到WebSocket连接。
WebSocket是SignalR的理想通信方式,因为WebSocket使服务器的内存得到最有效的利用,同时WebSocket具有最低的延迟,并拥有最底层特征(如客户端和服务器之间的全双工通信),但WebSocket也有最严格的要求:WebSocket需要服务器使用Windows Server 2012或Windows 8,和.NET框架4.5。如果不能满足这些要求,signalr将尝试使用其他通讯方式进行连接。
五、内置技术的使用步骤
下面的列表展示了SignalR决定使用具体哪种通信方式