学习
实践
活动
工具
TVP
写文章
专栏首页技术小讲堂ASP.NET SignalR 2.0入门指南介绍SignalRSignalR和WebSocket传输和回滚HTML5 传输协议Comet transports传输协议选择过程监测传输指定传输协议连接

ASP.NET SignalR 2.0入门指南介绍SignalRSignalR和WebSocket传输和回滚HTML5 传输协议Comet transports传输协议选择过程监测传输指定传输协议连接

介绍SignalR

ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程。实时Web功能使服务端代码推送内容到链接可客服端并立即应用成为可能,而不需要服务端等待客户端去请求数据。

SignalR可用于任何你想添加实时Web功能到ASP.NET应用程序的情形,聊天室是一个常用的例子,用户可以刷新Web页面来获得新的数据,或者页面使用一个长轮询来取回数据,这都是SignalR可以应用的场景。比如说仪表盘和监视系统,实时游戏等。

SignalR支持以一种简单的API来创建服务器到客户端的远程调用客户端的Javascript方法,SignalR还包括用于用于连接管理的API和分组连接。

SignalR自动的处理连接管理,并允许你像一个聊天室那样同时向所有连接的客户端广播消息,你也可以向特定的客户端发送消息,在客户端和服务器之间的连接是持久的,不需要像传统的HTTP连接那样重建每一个连接。

SignalR支持服务器推送功能,在服务器中可以调用在浏览器中的客户端代码,而不是像当今的“请求-响应”模式。

SignalR可以通过服务总线扩展到数以千计的客户端,同时SignalR是开源的,可以用过Github访问到。

SignalR和WebSocket

SignalR当WebSocket可用时优先使用新式的WebSocket传输,同时也兼容老式的传输。虽然你可以立刻使用WebSocket编写你的应用程序,但是使用SignalR意味着你可以获得本来需要你自己去实现的很多扩展方法,最重要的是,你可以直接使用SignalR编写利用WebSocket的代码,而不必担心还要为旧的客户端提供支持。同时你也不必担心WebSocket的更新,因为SignalR会持续的更新来支持基础的传输协议,提供对不同版本的WebSocket的统一接口支持。

虽然你可以单独使用WebSocket创建你的解决方案,但是SignalR支持所有你需要自己去编写的方法,比如支持其他修订版的功能。

传输和回滚

SignalR是对一些服务器和客户端之间实时协作传输的抽象化,一个SignalR连接作为一个HTTP开始,但是如果WebSocket是可用的将得到利用。WebSocket是SignalR理想的传输方法,它能高效的利用服务端存储,拥有最少的延迟,而且拥有最基础的功能(比如全双工通信),但是它也同时又严格的要求:WebSocket必须要求服务器使用Windows Server 2012或者windows 8,使用.NET Framework 4.5框架,如果没有达到这些条件,SignalR将试图使用其他的传输来创建连接。

HTML5 传输协议

这些传输依赖于对HTML5的支持,假如客户端不支持HTML5标准,讲使用老式的传输协议:

WebSocket:(如果客户端可服务器端都支持WebSocket)。WebSocket是唯一一个建立客户端和服务器端在真正的持久的双工的传输协议,但是同时WebSocket也拥有严格的要求,它只在最新版本的IE、chrome和FireFox得到支持,在像Opera和Safari这些浏览器中得到的一部分的实现。

服务器发送事件:也称为事件源。基本上除了IE以外都支持事件源。

Comet transports

以下的传输协议是基于Comet web应用程序模型的,在客户端浏览器或者其他客户端维持一个长期持久的HTTP请求,服务器端使用它推送数据而无需客户端单独请求。

持久型框架(Forever Frame):(仅限于IE)持久型框架创建一个隐藏的IFrame,用它来创建一个在服务器终结点不结束的请求,服务器端可以持续不断的发送到客户端执行脚本,一次来支持一个单向的从服务器端到客户端的实时连接。这个链接使用了与客户端请求服务器端不同的连接,像一个标准的HTTP请求,为每个需要发送的数据创建新的连接。

AJAX长轮询(Ajax long polling),长轮询不创建持久的连接,取而代之的是

直到服务器另一端有反馈,在向开放的服务器发送请求,此时需要马上建立新的链接

传输协议选择过程

下面列表显示了SignalR选择传输协议的过程:

1.如果浏览器是IE8或者更老的版本,使用长轮询;

2.如果配置了JSONP(当连接开始的时候设置jsonp参数为true),使用长轮询;

3.如果正在创建跨域的连接(如果SignalR终结点不和页面上的地址相同),如果以下条件符合将使用WebSocket:

  • 客户端支持CORS(了解详细情况,请点击这里
  • 客户端支持WebSocket
  • 服务器端支持WebSocket

4。如果JSONP没有被配置并且连接不是跨域的,如果客户端和服务器端都支持WebSocket,将使用WebSocket;

5.假如客户端和服务器端都不支持WebSocket,尽量使用事件源;

6.如果服务器端不支持事件源,使用持久型框架;

7.如果持久型框架也失败,使用长轮询。

监测传输

你可以决定是否在总线上打开日志记录,打开浏览器的控制台窗口。

要启动你在浏览器的总线事件,请将以下命令添加到客户端应用程序中:

在IE中,按F12打开开发人员工具,点击“控制台”标签页。

在Chrome中,使用组合键Ctrl+Shift+J打开控制台

指定传输协议

协商传输协议需要一定的时间和服务器客户端资源,如果客户端可以预知到,那么传输协议可以在连接开始的时候指定,以下代码通过一个简短的示例开启一个使用AJAX长轮询的连接,如果它已知客户端不支持其他任何的协议:

connection.start({ transport: 'longPolling' });

你也可以指定一个回调顺序让客户端去尝试指定传输协议:

connection.start({ transport: ['webSockets','longPolling'] });

以下是定义的用于指定传输协议的字符串:

  • webSockets
  • foreverFrame
  • serverSentEvents
  • longPolling

连接和总线

SignalR API包含两种服务器端和客户端的通信模型:持久连接和总线.

一个连接表示单个收件人、编组或者广播消息发送一个简单的终结点。持久化连接API赋予程序员直接访问SignalR提供的底层通信协议的能力,使用连接通信模型类似于程序员使用像WCF那样基于连接的API。

总线是更高级别的管道,他是建立在基于连接的API上,允许客户端和服务器彼此直接调用方法。SignalR神奇的处理在跨越机器的调度,让客户端调用服务器端代码像调用本地方法那样简单,反之亦然。使用总线通信模型类似于使用.NET Remoting这样的远程调用API,使用总线模型允许你将强类型的参数传给方法,进行模型绑定。

体系结构关系图

以下关系图表示了总线、持久化连接和用于传输的基本技术间的关系:

原文地址:http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/introduction-to-signalr

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:http://xiaoyaojian.cnblogs.com/复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 常见的Web实时消息交互方式和SignalR

    标签: WebSocket SignalR 前言 最近因为项目中涉及到了实时数据的传输,特地去了解了一下当前Web应用中常见的实时交互手段,当然一开始也不仅限于...

    潘成涛
  • SignalR介绍简单示例教程入门版

    程序你好
  • ASP.NET Core基于SignalR实现消息推送实战演练

    跟着阿笨一起玩NET
  • SignalR简介

    ASP.NET SignalR是ASP.NET开发人员的库,它简化了向应用程序添加实时Web功能的过程。实时网络功能可以让服务器代码在连接的客户端可用时立即将...

    喵叔
  • ASP.NET Core基于WebSocket实现消息推送实战演练

    跟着阿笨一起玩NET
  • Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

    1996年IETF  HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展。这种分布式、无状态、基于TC...

    JackJiang
  • WebSocket详解(六):刨根问底WebSocket与Socket的关系1、前言2、系列文章3、更多资料4、技术对比5、OSI 模型与 TCP/IP6、WebSocket 与 TCP7、再来八卦一

    对于很多初次接触Web端即时通讯技术的人来说,WebSocket是个很新的概念,但无疑它是当前Web端即时通讯技术中最热门的关键词。随便点开一篇文章,只要说打算...

    JackJiang
  • WebSocket与消息推送

    B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为...

    张果
  • HTML5 学习总结(五)——WebSocket与消息推送

    B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为...

    张果
  • ASP.NET Core的实时库: SignalR简介及使用

    SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用Web Socket, Server Sent Ev...

    solenovex
  • Asp.Net Core SignalR 与微信小程序交互笔记

    Asp.Net Core SignalR 是微软开发的一套基于Asp.Net Core的与Web进行实时交互的类库,它使我们的应用能够实时的把数据推送给Web客...

    脑洞的蜂蜜
  • 搞懂现代Web端即时通讯技术一文就够:WebSocket、socket.io、SSE

    有关Web端即时通讯技术的文章我已整理过很多篇,阅读过的读者可能都很熟悉,早期的Web端即时通讯方案,受限于Web客户端的技术限制,想实现真正的“即时”通信,难...

    JackJiang
  • .NET WebSocket 核心原理初体验

    上个月我写了《.NET gRPC核心功能初体验》, 里面使用gRPC双向流做了一个打乒乓球的Demo, [实时][双向]这两个标签是不是很熟悉,对, WebSo...

    有态度的马甲
  • 八问WebSocket协议:为你快速解答WebSocket热门疑问

    WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持。它使用方面、应用广泛,已经渗透到前后端开发的各...

    JackJiang
  • 八问WebSocket协议:为你快速解答WebSocket热门疑问

    WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持。它使用方面、应用广泛,已经渗透到前后端开发的各...

    JackJiang
  • 万字长文,一篇吃透WebSocket:概念、原理、易错常识、动手实践

    本文将从基本概念、技术原理、常见易错常识、动手实践等多个方面入手,万字长文,带你一起全方位探索 WebSocket 技术。

    JackJiang
  • .Net Web开发技术栈

    有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net w...

    小曾看世界
  • WebSocket和Socket的区别,你真的知道吗?

    应用场景: 网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。

    Vincent-yuan
  • 使用SuperWebSocket 构建实时 Web 应用

    Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于...

    张善友

扫码关注腾讯云开发者

领取腾讯云代金券