实际上关于SignalR的介绍网上有很多,这里不做过多赘述,我们来看下官方网站的描述。

【摘录自http://signalr.net/

What is ASP.NET SignalR

ASP.NET SignalR is a new library for ASP.NET developers that makes it incredibly simple to add real-time web functionality to your applications. What is "real-time web" functionality? It's the ability to have your server-side code push content to the connected clients as it happens, in real-time.

You may have heard of WebSockets, a new HTML5 API that enables bi-directional communication between the browser and server. SignalR will use WebSockets under the covers when it's available, and gracefully fallback to other techniques and technologies when it isn't, while your application code stays the same.

SignalR also provides a very simple, high-level API for doing server to client RPC (call JavaScript functions in your clients' browsers from server-side .NET code) in your ASP.NET application, as well as adding useful hooks for connection management, e.g. connect/disconnect events, grouping connections, authorization.

What can you do with ASP.NET SignalR?

SignalR can be used to add any sort of "real-time" web functionality to your ASP.NET application. While chat is often used as an example, you can do a whole lot more. Any time a user refreshes a web page to see new data, or the page implements Ajax long polling to retrieve new data, is candidate for using SignalR.

It also enables completely new types of applications, that require high frequency updates from the server, e.g. real-time gaming. For a great example of this see the ShootR game(作者:这个游戏很给力)

实际上很早以前我就有过使用server push技术的想法,不过一直没有实现,总是有一些问题。一般来说原理就是一个长连接,好比在client与server之间建立一个通信通道,维护请求与响应,我们都知道,请求之后响应就会回来,但是如果我们把请求hold 住, 不撒手, 当server需要push时,在把这个响应推回给client。SignalR对这部分处理的相当精彩。

我们来创建一个mvc4的项目,通过NuGet来获取SignalR的所需组件。

对于SignalR来说,他需要将自身的hub进行注册,也就是说需要注册到路由中,这个hub可以理解为分发器或者推送器。

所以,创建RegisterHubs.cs


其中需要WebActivatorEx来进行注入,所以需要获得这个组件。

第二,我们来组织一下页面,并不复杂,

创建一个controller,就叫做home吧,

第三,创建view,

第四,修改BundleConfig,

第五,修改_Layout.cshtml,

这里要注意,<script src="../signalr/hubs"></script>这句是一定要加的,而且需要加在 jquery.signalR-1.0.1.js的下面。大家也会发现,在下面会有一个自己的demo.js,为了方便就放这里了。

第六,来创建hub,

这里说几句,HubName跟actionName类似。在hub中,定义了三个服务器端的方法,用来被客户端调用,而在这些方法中也有一些方法并没被定义,这个是需要在demo.js中被定义的,用来被服务器端调用。

Clients.All,这句相当于广播。

Clients.Client(to),这句相当于知道了对方的ConnectionId,来进行特定点的推送。

这里逻辑并不复杂。

附带上user的代码,

第七,来创建demo.js和hub进行沟通,

这里简单说几句,var chat = $.connection.chat;相当于获得hub对象,由他来建立通道。

chat.client这里,来给client注册一些方法,如果服务器端进行调用这些方法,那么客户端就会执行,参数神马的一看就明白了。

chat.server,服务器端的方法通过这种形式进行调用。

这样就会得到一方有动作,所有连接的客户端都会得到消息,而不用进行轮询。

具体效果,跑起来就明白了,程序挺简单。

最后,我和同事进行了测试,如果在有3方连接,在操作过程中,其中一方掉线了(我们拔掉了网线),此时我客户端发消息,服务器端得到消息进行推送,推送完成后,掉线一方插上网线,过了一会,消息就被推送过来了,看起来他在服务器端进行了一些信息的维护,估计是有一个时间的,超过一个时间连接就失效了。这一点很厉害。不用自己维护了。

SignalR -- server push 利器的更多相关文章

  1. HTTP 笔记与总结(9)分块传输、持久链接 与 反向 ajax(comet / server push / 服务器推技术)

    反向 ajax 又叫 comet / server push / 服务器推技术 应用范围:网页聊天服务器,例如新浪微博在线聊天.google mail 网页聊天 原理:一般而言,HTTP 协议的特点是 ...

  2. Asp.net的服务器推技术 (Server Push)

    在以往的和服务器端通信技术中,我们多数使用的是AJAX轮询式访问,也就是在Javascript中控制时间间隔,然后每隔一段时间就访问一次服务器,然后获得数据或通知.但是这种轮询方式的访问有90%是在做 ...

  3. Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程

    原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL S ...

  4. Server push(服务器推送技术)

    一.服务器推送技术Server Push详解:        推送技术Server Push的基础思想是将浏览器主动查询信息改为服务器主动发送信息.服务器发送一批数据,浏览器显示这些数据,同时保证与服 ...

  5. HTTP/2之服务器推送(Server Push)最佳实践

    商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处.   WeTest 导读 HTTP/1.X出色地满足互联网的普遍访问需求,但随着互联网的不断发展,其性能越来越成为瓶颈.IETF在2015 ...

  6. 让互联网更快,Server Push 特性及开启方式详解

    过去 Nginx 并不支持 HTTP/2 的 Server Push 特性,幸运的是 Nginx 1.13.9 已支持该特性,详情介绍请移步 Nginx 官方博客. Server Push 这个特性是 ...

  7. 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...

  8. HTTP/2 Server Push 详解(上)

    收录待用,修改转载已取得腾讯云授权 译者:TAT.Johnny 原文:https://www.smashingmagazine.com/2017/04/guide-http2-server-push/ ...

  9. http2及server push

      本文主要研究下java9+springboot2+undertow2启用http2及server push maven <parent> <groupId>org.spri ...

随机推荐

  1. vue之基础---组件基础

    (1)基本示例 Vue组件示例 /* 先注册组件,定义一个名为button-component的新组件 */ Vue.component('button-component',{ data:funct ...

  2. js数组的处理

    //重写Array中的indexOf方法,获取数组中指定值的元素的索引 Array.prototype.indexOf = function (val) { for (var i = 0; i < ...

  3. 完善本地搭建的jekyll环境(Windows)

    序:上篇文章虽然在本地搭建好了jekyll环境,但是却存在一些问题,如通过jekyll new创建的站点无法正常跑起来.中文编码有问题.这说明之前搭建的环境有不周之处. PS:因之前自己搭建环境时并未 ...

  4. 微信小程序中使用ECharts 异步加载数据 实现图表

    <!--pages/bar/index.wxml--> <view class="container"> <ec-canvas id="my ...

  5. css3文字渐变无效果的解决方案

    现在css3越来月流行了,为了实现一些高大上的效果,我们会用一些渐变的特效,请看文字渐变的特效代码: .title { font-size: 60px; line-height: 80px; text ...

  6. 【IDEA】【Git】pull代码始终无法pull到最新的代码或者提示pull no items 【解决方式】

    最近pull代码老是提示pull no items,但是本地并不是最新的代码,看了各种博客始终无法解决,最后靠自己的方式解决.下面是解决方法. 方法:1.首先git --> repository ...

  7. Java写时复制CopyOnWriteArrayList

    Copy-On-Write是一种程序设计的优化方法,多线程在不修改对象时可以共享一个对象地址空间,如果某一个线程要求修改对象时,需要首先将原来对象复制一份,在新复制的对象地址空间上修改对象内容,其他线 ...

  8. python输出带颜色字体详解

    在python开发的过程中,经常会遇到需要打印各种信息.海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性.这时候,如果能给重要的信息加上字体颜色,那么就会更加方便用户阅读了. ...

  9. 关于git上传GitHub以及码云(gitee)

    如果你是gitee(码云),点击链接跳转 首先,你的有一个GitHub的账号(然后新建项目我就不说了) # Linux的方法 GitHub网站下的,点击settings下的emails,确认自己的邮箱 ...

  10. Leetcode 135.分糖果

    分发糖果 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻的孩 ...