什么是SignalR?
ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信。什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以互相通知消息及调用方法,当然这是实时操作的。
WebSockets是HTML5提供的新的API,可以在Web网页与服务器端间建立Socket连接,当WebSockets可用时(即浏览器支持Html5)SignalR使用WebSockets,当不支持时SignalR将使用其它技术来保证达到相同效果。
SignalR当然也提供了非常简单易用的高阶API,使服务器端可以单个或批量调用客户端上的JavaScript函数,并且非常 方便地进行连接管理,例如客户端连接到服务器端,或断开连接,客户端分组,以及客户端授权,使用SignalR都非常 容易实现。
SignalR 将与客户端进行实时通信带给了ASP .NET 。当然这样既好用,而且也有足够的扩展性。以前用户需要刷新页面或使用Ajax轮询才能实现的实时显示数据,现在只要使用SignalR,就可以简单实现了。最重要的是您无需重新建立项目,使用现有ASP .NET项目即可无缝使用SignalR。
这是百度词条上的解释
[渣译文] SignalR 2.0 系列: SignalR简介 博友翻译的一片博文
由此可知 SignalR 可以用来开发聊天室,
还可以用来开发
用户需要不停的刷新网页来看最新的数据;
在页面上通过实现长轮询来检索新数据(并显示)的程序,
比如:仪表板及监视型应用程序;协作型应用程序(如多人同时对文档进行编辑);作业进度更新及实时呈现表单等。
SignalR的应用可以使用服务总线,SQL SERVER或者Redis来扩展到数以千计的客户端上。
SignalR使用WebSocket传输方式——在可能的情况下。并且会自动切换到旧的传输方式(如HTTP长连接)。
WebSocket是SignalR最理想的传输方式,因为它可以最有效地利用服务器的内存,拥有最低的延迟及全面的底层功能(比如客户端和服务器间的全双工通讯),但它也有最严格的要求:服务器必须使用Windows Server 2012或Windows 8操作系统,同时.Net框架版本4.5及以上。如果不符合这些要求,SignalR将尝试采用其他传输方式以进行连接。
你可以通过启用Hub日志记录,并在浏览器的控制台中查看应用程序使用何种传输方式。
要启用日志记录,添加以下命令到客户端应用程序:
$.connection.hub.logging = true;
SignalR API中包含两中客户端-服务器进行通信的模型:永久连接和集线器(Hubs)。
永久连接表示一个发送单个、分组或广播消息的简单终结点。持久性连接API(在.NET 代码中由 PersistentConnection 类表示)可以让开发人员直接访问SignalR的底层通信协议。使用过基于连接API如WCF的开发人员将更熟悉连接通信模型。
集线器是基于API但级别更高一级的通信管道,它允许客户端和服务器上互相直接调用方法。SignalR能够奇妙的处理跨机器的调度,让客户端轻松的调用服务器上的方法,如同调用本地方法一样,反之亦然。使用过基于远程调用的AIP如.Net Remoting的开发人员将更熟悉集线器模型。使用集线器,你还可以将强类型的参数传递给方法并且对模型绑定。
大多数应用程序可以使用集线器的API,但在下列的情况下,你应当使用连接API:
- 需要指定发送消息的格式。
- 开发人员更喜欢使用消息传递和调度模型,而不是一个远程调用模型
- 现有的应用程序中正在使用消息传递模型,计划移植到SignalR上。
支持的服务器操作系统
SignalR的服务器组件被以下服务器和客户端操作系统支持。
- Windows Server 2012
- Windows Server 2008 R2
- Windows 8
- Windows 7
- Windows Azure
请注意,如果你想让SignalR使用的WebCosket,则需要Windows Server 2012或Windows 8 操作系统(WebSocket也可以被Windows Azure网站支持,前提是网站的.Net框架版本为4.5,并且在配置页中已经启用了WebSockets)。
支持的服务器.Net框架版本
SignalR 2.0仅支持.Net 框架4.5
支持的服务器IIS版本
SignalR被以下版本的IIS支持。
- IIS 8 或 IIS 8 Express。
- IIS 7 和 IIS 7.5,需要extensionless URLs支持。
- IIS必须在集成模式下运行,不支持经典模式。当IIS运行在经典模式时,使用服务器发送事件可能带来30秒的消息延迟。
- 托管应用程序必须运行在信任模式下。
请注意,如果使用客户端操作系统,比如用于开发(Windows 7 或 8),则不应使用IIS或Cassini的完整版本。因为客户端有10个并发连接的限制,要达到这一限制非常容易,因为连接是非常短暂的而且经常重新建立。并且在连接使用过后并不会立即销毁。你应当使用IIS Express。
还需要注意如果你想要SignalR使用WebSocket,则必须使用IIS 8 或IIS 8 Express,服务器必须使用Windows 8 , Windows Server 2012并且IIS必须启用了WebSocket,关于在IIS中启用WebSocket,请参阅IIS 8.0 WebSocket Protocol Support。
客户端系统需求
SignalR可以用于各种客户端平台。本节介绍SignalR在Web浏览器、Windows桌面应用程序,Silverlight应用程序和移动设备中的系统要求。
Web浏览器
SignalR可以在各种Web浏览器中使用,但通常情况下,只有支持最新的两个版本。
应用程序在浏览器中使用SignalR必须使用jQuery版本1.6.4,或主要版本(如1.7.2,1.8.2,1.9.1等)。
SignalR在以下浏览器中可用:
- IE8 , 9 , 10 , 11 桌面及移动,Win8的Modern,版本都支持。
- 火狐:当前版本-1,Win及Mac版本。
- Chrome:当前版本-1,Win及Mac版本。
- Safari:当前版本-1,Mac及iOS版本。
- Opera:当前版本-1,仅限Win版本。
- 安卓浏览器。
除了浏览器要求,SignalR所使用的传输方式也有各自的要求,如下表:
传输方式 | IE | Chrome(Win或iOS) | FF | Safari(OSX或iOS) | 安卓 |
WebSockets | 10+ | 当前-1 | 当前-1 | 当前-1 | 不支持 |
Server-Sent Events | 不支持 | 当前-1 | 当前-1 | 当前-1 | 不支持 |
ForeverFrame | 8+ | 不支持 | 不支持 | 不支持 | 4.1 |
Long Polling | 8+ | 当前-1 | 当前-1 | 当前-1 | 4.1 |
不支持的浏览器
虽然在旧版本的浏览器中运行SignalR中可能不会有重大问题,但我们不会主动去测试SignalR在旧浏览器中的运行情况,也不会解决同旧浏览器的兼容问题。
请参考配置及测试列表: our testing matrix。
Windows桌面和Sliverlight应用程序
除了在网络浏览器上运行,SignalR也可以被配置使用在独立的Windows客户端或Silverlight应用程序中。要使用SignalR,Windows桌面和Silverlight应满足以下系统需求:
- 在Win XP SP3及以上,应用程序使用.Net 框架版本4。
- 在Windows Vista及以上,应用程序使用.Net 框架版本4.5。
除了操作系统及框架版本需求,SignalR对于传输方式也有各自的要求,如下表:
传输方式 | .Net应用程序 | Silverlight |
WebSockets | Win 8及.Net 4.5以上 | 不支持 |
ForeverFrame | 不支持 | 不支持 |
Server-Sent Events | .Net 4以上 | 5以上 |
Long Polling | .Net 4以上 | 5以上 |
Windows存储和Windows Phone应用程序
SignalR可以用在Windows存储和Windows Phone应用程序中,对于传输方式也有各自的要求,如下表:
传输方式 | Windows存储/.Net | Windows存储/JS | Windows Phone/IE | Windows不支持 Phone/.Net |
WebSockets | 不支持 | Win8以上 | 8以上 | 不支持 |
ForeverFrame | 不支持 | Win8以上 | 7.5以上 | 不支持 |
Server-Sent Events | Win8以上 | 不支持 | 不支持 | 8以上 |
Long Polling | Win8以上 | Win8以上 | 7.5以上 | 8以上 |
推荐更新
推荐以下SignalR服务器更新:
- .Net框架4.5的更新程序,在这里。
- 微软会定期发布ASP.NET的快速更新补丁,应当及时安装它们。
以上是博友文章的节选