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 ...
随机推荐
- JavaScipt30(第十个案例)(主要知识点:选中一个数组中间相连部分进行操作的一种思路)
承接上文,第九个案例就不说了,是控制台的一些东西,一般用的很少,了解下就行了,想用的时候再翻api.这是第10个案例: 需要实现的效果是:点击一个checkbox,然后按下shift点击另一个chec ...
- 16 this和super和构造代码块
this关键词---当前类的对象的引用 public class Public { String name; int age; public static void main(String[] arg ...
- 26-Ubuntu-文件和目录命令-其他命令-管道
管道 Linux允许将一个命令的输出可以通过管道作为另一个命令的输入. 可以理解为现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里的 | 左右分为两端,左端塞东西(写),右端取东西(读). ...
- 01网页<head></head>常用标记及属性
网页<head></head>常用标记及属性 <!DOCTYPE html> <html> <head> <!--网页标题--> ...
- Oracle 11g 字符集修改
服务端字符集修改 1.确认服务端字符集 select userenv('language') from dual; 2.修改服务端字符集 首先以 DBA 身份登录 Oracle.Windows 系统下 ...
- 深入理解DOM事件类型系列——剪贴板事件
定义 剪贴板操作包括剪切(cut).复制(copy)和粘贴(paste)这三个操作,快捷键分别是ctrl+x.ctrl+c.ctrl+v.当然也可以使用鼠标右键菜单进行操作 对象事件 关于这3个操作共 ...
- css 实现鼠标滑过流光效果
来划我啊 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- WIndows 系统下的常用命令 和 检测方法
### 一.检测硬盘速度(Windows 自带工具) #### 使用windows 系统自带的工具测试硬盘读写速度 > 在使用下面命令前,需要获得管理员权限,才会在Dos窗口上显示(否则,一闪而 ...
- Fleecing the Raffle(NCPC 2016 暴力求解)
题目: A tremendously exciting raffle is being held, with some tremendously exciting prizes being given ...
- Django-Rest framework中文翻译-generic-views
通用视图 Django的通用视图......被开发为常见用法模式的快捷方式......它们采用视图开发中的某些常见习语和模式并对其进行抽象,以便您可以快速编写数据的常用视图,而无需重复自己. - Dj ...