SignalR -- server push 利器
实际上关于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 利器的更多相关文章
- HTTP 笔记与总结(9)分块传输、持久链接 与 反向 ajax(comet / server push / 服务器推技术)
反向 ajax 又叫 comet / server push / 服务器推技术 应用范围:网页聊天服务器,例如新浪微博在线聊天.google mail 网页聊天 原理:一般而言,HTTP 协议的特点是 ...
- Asp.net的服务器推技术 (Server Push)
在以往的和服务器端通信技术中,我们多数使用的是AJAX轮询式访问,也就是在Javascript中控制时间间隔,然后每隔一段时间就访问一次服务器,然后获得数据或通知.但是这种轮询方式的访问有90%是在做 ...
- 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 ...
- Server push(服务器推送技术)
一.服务器推送技术Server Push详解: 推送技术Server Push的基础思想是将浏览器主动查询信息改为服务器主动发送信息.服务器发送一批数据,浏览器显示这些数据,同时保证与服 ...
- HTTP/2之服务器推送(Server Push)最佳实践
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest 导读 HTTP/1.X出色地满足互联网的普遍访问需求,但随着互联网的不断发展,其性能越来越成为瓶颈.IETF在2015 ...
- 让互联网更快,Server Push 特性及开启方式详解
过去 Nginx 并不支持 HTTP/2 的 Server Push 特性,幸运的是 Nginx 1.13.9 已支持该特性,详情介绍请移步 Nginx 官方博客. Server Push 这个特性是 ...
- 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...
- HTTP/2 Server Push 详解(上)
收录待用,修改转载已取得腾讯云授权 译者:TAT.Johnny 原文:https://www.smashingmagazine.com/2017/04/guide-http2-server-push/ ...
- http2及server push
本文主要研究下java9+springboot2+undertow2启用http2及server push maven <parent> <groupId>org.spri ...
随机推荐
- Django - 模版之继承
模版继承: 当多个html有共同之处时,需要建立一个模版html(master.html) 1.在模版html中,写入公共的部分: 备注:在模版中,我们可以指定多个block ,其中,可以在标题,cs ...
- 让元素div消失在视野中
让元素div消失在视野中1.position:absolute/relative/fixed + 方位 top/bottom/left/right: -9999px2.display:none3.vi ...
- 洛谷——P2420 让我们异或吧
P2420 让我们异或吧 题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B ...
- Cash Machine POJ - 1276
解法 多重背包板子题 多重背包板子 如果上限的体积大于了给定的体积那么套完全背包 否则二进制优化成01背包 代码 #include <iostream> #include <cstr ...
- Datatable 插入一行数据到第一行
var t = $('#passwdHOST').DataTable({ 'searching': true, 'ordering': false, 'autoWidth': false, dom: ...
- Thunderbird and Gmail
https://support.mozilla.org/en-US/kb/thunderbird-and-gmail
- 洛谷 3398 仓鼠找sugar 【模板】判断树上两链有交
[题解] 题意就是判断树上两条链是否有交.口诀是“判有交,此链有彼祖”.即其中一条链的端点的Lca在另一条链上. 我们设两条链的端点的Lca中深度较大的为L2,对L2与另一条链的两个端点分别求Lca, ...
- [luoguP3252] [JLOI2012]树(DP)
传送门 树上前缀和. 在树上找一条权值和为 s 的链,其中这个链上的点按深度递增(递减)(不同) dfs 每搜到一个点求它的前缀和 sum[x],放入 set 中. 在 set 中找 sum[x] - ...
- 开源的多行字符串工具: 在JS中整段地写HTML
这样看来ES6的多行字符模板可能就不需要了-- 通过这个你可以整段整段地在JS中写HTML.SQL了. 示例 之前你得这样写 var str = '' +'<!doctype html>' ...
- 交友app
编辑注记:这是由译者 han_qi 翻译纽约客的一篇文章,从女性的角度描写了交友产品的用户体验及需求,值得广大产品经理深入研究,文章略长,但值得深读.原文<Overwhelmed and Cre ...