Signalr入门系列:Signalr简介(二)

摘要:
SignalR可以自动判断传输方式,在可以用的情况下使用新的WebSocket传输,并在必要时使用旧的传输。使用SignalR无需担心WebSocket的更新,因为SignalR为应用程序提供跨WebSocket版本的一致接口,并且在持续更新基础传输协议的更改。如果这些要求不符合,SignalR将尝试使用其他传输进行连接。Transport的选择过程以下列表显示了SignalR用来决定使用哪个传输的步骤。如果正在进行跨域连接,那么如果满足以下条件,将使用WebSocket:客户端支持CORS。

一、SignalR和WebSocket

SignalR是在WebSocket的基础上进一步的封装,可以实现除了WebSocket原有功能上更多的功能,例如回退到其他transports,修改应用程序以更新WebSocket implementations。SignalR可以自动判断传输方式,在可以用的情况下使用新的WebSocket传输,并在必要时使用旧的传输。使用SignalR无需担心WebSocket的更新,因为SignalR为应用程序提供跨WebSocket版本的一致接口,并且在持续更新基础传输协议的更改。

二、Transports and fallbacks

SignalR是对在服务器和客户端需要实时工作所需的一些传输的抽象。SignalR连接以HTTP方式启动,如果WebSocket可用,则会将其提升为WebSocket连接。WebSocket是SignalR的理想传输方式,因为它使服务器内存的使用效率最高,延迟最低,并且具有最多的底层功能(例如客户端和服务器之间的全双工通信),但它也具有最严格的要求:WebSocket要求服务器使用Windows Server 2012或Windows 8和.NET Framework 4.5。如果这些要求不符合,SignalR将尝试使用其他传输进行连接。

HTML 5传输

这些传输依赖于对HTML 5的支持如果客户端浏览器不支持HTML 5标准,则将使用较旧的传输。

  • WebSocket(如果服务器和浏览器都表示可以支持WebSocket)。WebSocket是在客户机和服务器之间建立一个真正的永久性双向连接的唯一传输方式。但是,WebSocket也有最严格的要求;它仅在最新版本的Microsoft Internet Explorer,Google Chrome和Mozilla Firefox中得到完全支持,并且只在其他浏览器(如Opera和Safari)中部分实现。
  • Server Sent Events,也称为EventSource(如果浏览器支持Server Sent Events,基本上所有浏览器都是Internet Explorer除外)。

Comet Transports

以下传输基于CometWeb应用程序模型,其中浏览器或其他客户端维护长时间的HTTP请求,服务器可以使用该请求将数据推送到客户端,而无需客户端特别请求。

  • Forever Frame(仅适用于Internet Explorer)。Forever Frame创建一个隐藏的IFrame,向服务器上的一个未完成的端点发出请求。然后,服务器不断发送脚本到立即执行的客户端,提供从服务器到客户端的单向实时连接。从客户端到服务器的连接使用从服务器到客户端连接的单独连接,并且像标准HTTP请求一样,为每个需要发送的数据创建一个新的连接。
  • Ajax长时间轮询长轮询不会创建一个持久连接,而是用一个保持打开的请求轮询服务器,直到服务器响应,此时连接关闭,并立即请求一个新的连接。连接重置时,这会产生一定的延迟

有关在哪些配置下支持哪些传输的更多信息,请参阅支持的平台

Transport的选择过程

以下列表显示了SignalR用来决定使用哪个传输的步骤。

  • 如果浏览器是Internet Explorer 8或更低版本,则使用长轮询。
  • 如果配置了JSONP(即连接启动时JSONP设置为参数true),则使用长轮询。
  • 如果正在进行跨域连接(即,如果SignalR端点与宿主页面不在同一个域中),那么如果满足以下条件,将使用WebSocket:
    • 客户端支持CORS(跨源资源共享)。有关哪些客户端支持CORS的详细信息,请参阅caniuse.com上的CORS
    • 客户端支持WebSocket
    • 该服务器支持WebSocket
    • 如果这些标准有一个不符合,将使用长轮询。有关跨域连接的更多信息,请参阅如何建立跨域连接
  • 如果JSONP没有配置,并且连接不是跨域的,如果客户端和服务器都支持,将使用WebSocket。
  • 如果客户端或服务器不支持WebSocket,则使用“Server Sent Events”(如果可用)。
  • 如果Server Sent Events不可用,则尝试Forever Frame。
  • 如果Forever Frame失败,则使用长轮询。

免责声明:文章转载自《Signalr入门系列:Signalr简介(二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Centos7 中查找文件、目录、内容stylelint — css书写规范下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# ASP.NET MVC 之 SignalR 学习 实时数据推送显示 配合 Echarts 推送实时图表

本文主要是我在刚开始学习 SignalR 的技术总结,网上找的学习方法和例子大多只是翻译了官方给的一个例子,并没有给出其他一些经典情况的示例,所以才有了本文总结,我在实现推送简单的数据后,就想到了如何去推送复杂的数据,以及推送一个实时的图表数据,文本为我原创,转载请注明出处:Richard.Hu,先上一堆乱七八糟的说明先: SignalR的官方地址是: h...

Win7下恢复文件默认图标

下班了那会看了下ESRI官方对shapefile文件格式的说明文档,在好奇心的驱使下,我用“万能”的记事本和写字板程序分别打开了shapefile的主文件——*.shp,结果均显示一片乱码,失望至极。随之而来的是另一个心烦的问题,*.shp文件的图标变成写字板样式了。顶礼膜拜的ArcGIS软件,其文件图标居然编程这个样子,简直无法忍受~~    参考了网上...

如何进行 WebSocket 协议的压测

通过 Apache JMeter 和对应的插件编写脚本,并在 PTS 中上传这些脚本、插件 JAR 包和其他相关文件,即可发起压测。 本文以 JMeter WebSocket Samplers 插件为例,主要介绍如何在本地使用 Apache JMeter 编写、调试压测脚本,以实现 WebSocket 协议的业务场景压测。 背景信息 目前 PTS 原生压测...

WebSocket详解

WebSocket 出现前 构建网络应用的过程中,我们经常需要与服务器进行持续的通讯以保持双方信息的同步。通常这种持久通讯在不刷新页面的情况下进行,消耗一定的内存资源常驻后台,并且对于用户不可见。在 WebSocket 出现之前,我们有以下解决方案: 传统轮询(Traditional Polling) 当前Web应用中较常见的一种持续通信方式,通常采取 s...

[Openfire]使用WebSocket建立Openfire的客户端

近日工作闲暇之余,对IM系统产生了兴趣,转而研究了IM的内容。找了半天,知道比较流行的是Openfire的系统,Openfire有许多平台实现,由于我是做Web的,所以当然是希望寻找Web的实现。Openfire的以前的Web实现,是基于Http-bind的一种长轮询机制,当然也没什么不好,只是我现在HTML5都开始了,当然希望能够来个基于Websock...

F5 关于websocket

版本问题:  https://support.f5.com/csp/article/K14754  12.1.0 以后能够处理 websocket 协议,之前的版本可以使用两个vs 来区分, http 协议一个  ws 协议 一个  .。如果需要  ssl 协议 那么就配置一个 wss 的vs 。   11.4.0   版本到 12.1.0 版本可以 配置...