SignalR 实现web浏览器客户端与服务端的推送功能

SignalR 实现web浏览器客户端与服务端的推送功能

ID:40754535

大小:187.87 KB

页数:6页

时间:2019-08-07

SignalR 实现web浏览器客户端与服务端的推送功能_第1页
SignalR 实现web浏览器客户端与服务端的推送功能_第2页
SignalR 实现web浏览器客户端与服务端的推送功能_第3页
SignalR 实现web浏览器客户端与服务端的推送功能_第4页
SignalR 实现web浏览器客户端与服务端的推送功能_第5页
资源描述:

《SignalR 实现web浏览器客户端与服务端的推送功能》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、SignalR实现web浏览器客户端与服务端的推送功能SignalR是一个集成的客户端与服务器库,基于浏览器的客户端和基于ASP.NET的服务器组件可以借助它来进行双向多步对话。换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换;它将继续,直到明确关闭。对话通过永久连接进行,允许客户端向服务器发送多个消息,并允许服务器做出相应答复,值得注意的是,还允许服务器向客户端发送异步消息。它和AJax类似,都是基于现有的技术。本身是一个复合体。一般情况下,SignalR会使用Javascript的长轮询(longpolling),

2、实现客户端和服务端通信。在WebSockets出现以后,SignalR也支持WebSockets通信。当然SignalR也使用了服务端的任务并行处理技术以提高服务器的扩展性。它的目标整个.NETFramework平台,它也不限Hosting的应用程序,而且还是跨平台的开源项目,支持Mono2.10+,觉得它变成是WebAPI的另一种实作选择,但是它在服务端处理联机的功能上比ASP.NETMVC的WebAPI要强多了,更重要的是,它可以在WebForm上使用。SignalR内的客户端库(.NET/JavaScript)提供了自动管理

3、的能力,开发人员只需要直接使用SignalR的ClientLibrary即可,同时它的JavaScript库可和jQuery完美整合,因此能直接与像jQuery或Knockout.js一起使用。SignalR内部有两类对象:·PersistentConnection:持久性连接,用来解决长时间连接的能力,而且还可以由客户端主动向服务器要求数据,而服务器端也不需要实现太多细节,只需要处理PersistentConnection内所提供的五个事件:OnConnected,OnReconnected,OnReceived,OnError

4、和OnDisconnect即可。·Hub:信息交换器,用来解决realtime信息交换的功能,服务器端可以利用URL来注册一个或多个Hub,只要连接到这个Hub,就能与所有的客户端共享发送到服务器上的信息,同时服务器端可以调用客户端的脚本,不过它背后还是不离HTTP的标准,所以它看起来神奇,但它并没有那么神奇,只是JavaScript更强,强到可以用像eval()或是动态解释执行的方式,允许JavaScript能够动态的加载与执行方法调用而己。SignalR将整个交换信息的行为封装得非常漂亮,客户端和服务器全部都使用JSON来沟通

5、,在服务器端声明的所有hub的信息,都会一般生成JavaScript输出到客户端,.NET则是依赖Proxy来生成代理对象,这点就和WCF/.NETRemoting十分类似,而Proxy的内部则是将JSON转换成对象,以让客户端可以看到对象。下面我们来针对PersistentConnection和Hub做个Demo试试:新建一个ASP.NETMVC项目MvcApplicationSignalR,通过Nuget添加SignalR的包。新建一个类MyConnection继承自PersistentConnection,引用SignalR

6、命名空间,重写OnReceivedAsync的方法,并要求SignalR对传入的信息做广播usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSignalR; usingSystem.Threading.Tasks;namespaceMvcApplicationSignalR {   public classMyConnection:PersistentConnection   {       protecte

7、doverrideTaskOnReceivedAsync(IRequestrequest,stringconnectionId,stringdata)        {            //Broadcastdatatoallclients            data=string.Format("数据是:{0}时间是:{1}",data,DateTime.Now.ToString());            returnConnection.Send(connectionId,data);        }   } 

8、}接着在Global.asax中加入对应路由信息,这会由SignalR的路由表来处理Metadata的输出工作,红色部分代码:protectedvoidApplication_Start() {    RouteTable.Routes.MapCo

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。