asp.net signalR 专题—— 第二篇 对PersistentConnection持久连
上一篇我们快速的搭建了一个小案例,但是并没有对其中的方法进行介绍,这一篇我来逐一解析下。 ? 一:从override的那些方法说起 ? ?不管怎么样,我们先上代码,如下: 1 public class MyConnection1 : PersistentConnection 2 { 3 protected override Task OnConnected(IRequest request,string connectionId) 4 { 5 return Connection.Send(connectionId,"Welcome!"); 6 } 7 8 override Task OnReceived(IRequest request,1)">string connectionId,1)"> data) 9 10 return Connection.Broadcast(data); 11 12 } ? 首先我们知道的一个现象就是,所有的持久连接类都是继承于PersistentConnection,那么感兴趣的问题就来了,PersistentConnection中到底都定义 了些什么????于是乎我们就用F12去Persistent中一探究竟。 在上面的图中,可以清楚的看到,原来持久连接中并不仅仅是OnConnected 和?OnReceived方法,还有一个掉线的OnDisconnected事件和一个重连的 OnReconnected事件。 ? 1.?OnDisconnected 演示 ? ?从这个名字可以看的出来,掉线了就可以触发这个事件,对吧,ok,我可以在页面打开的时候,再刷新一下页面就可以触发OnDisconnected事件,为 了方便演示,我在每个方法里面都加上了Debug.WriteLine方法,如下图: 1 5 Debug.WriteLine(OnConnected 6 7 8 9 10 11 Debug.WriteLine(OnReceived12 13 14 15 override Task OnDisconnected(IRequest request,1)">bool stopCalled) 16 17 Debug.WriteLine(OnDisconnected18 return base.OnDisconnected(request,connectionId,stopCalled); 19 20 21 override Task OnReconnected(IRequest request,1)">22 23 Debug.WriteLine(OnReconnected24 .OnReconnected(request,connectionId); 25 26 } 从上图中的三个msg可以看到,这就是在页面呈现之后,再刷新了一下所做的操作。 ? 2.?OnReconnected 事件 ? ?这个事件的演示也是很简单的事情,当页面呈现之后,再关掉iis服务器,也就是iisexpress,然后再重新开启iisexpress,这样就可以触发 OnReconnected事件了,比如下面这样。 从output控制台和当前的chrome页面中可以看出,第一个tab页的过程就是OnConnected =>?OnDisconnected =>?OnReconnected,对不对,第 二个tab页面,就是再重启之后开启的一个新页面,也就是第二个OnConnected事件。 ? 二:Connection链接 ? ? 第二个让我们关注的地方就是Connection,因为它就是用来管理信息的发送和输出的一个链接管理类,如下图: ? ? 可以看到这个属性是IConnection类型,然后就很好奇看看这个类型有哪些可供我们使用的方法,通过下面的图,我们看到,只有两个好玩的方法,第一个 是用来广播消息的Broadcast,顾名思义,就是给所以链接到server的客户端都发送一条消息, 一个是发送给特定人的Send。 ? 好了,在上一篇中,我演示的仅仅是server向client推送消息,并没有演示client如何向server推送消息,其实也很简单,因为我们有了强大的signalR.js, 为了方便我就仅仅在start成功之后,加上一句send方法向server推送信息,当然了,你可以将send方法加到一个click事件中已适应你的业务逻辑。 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv=Content-Type" content=text/html; charset=utf-8" /> 5 <title></title> 6 <meta charset=utf-8 7 </head> 8 <body> 9 <script src=/scripts/jquery-1.10.2.js"></script> 10 <script src=/scripts/jquery.signalR-2.1.2.js11 <script type=text/javascript"> 12 var conn = $.connection(/myconnection13 14 conn.start().done(function (data) { 15 console.log(当前clientID=" + data.id); 16 17 conn.send("操,我已经收到啦。"); 18 }); 19 20 //接受服务器的推送 21 conn.received(function (data) { 22 console.log(server返回的数据: data); 23 24 </script> 25 </body> 26 </html> ? 上面大概性的标注了下流程,我想到现在为止,你的持久连接构建应该不成问题了,虽然还有group操作,但这不妨碍你用signalR进行开发,好了, 本篇就先说到此,后续再慢慢聊。 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在typescript和knockout中使用viewmodel时的
- asp.net-mvc – ASP.NET MVC – HtmlHelper和Session数据
- asp-classic – 浏览器似乎忽略了响应缓存控制指令
- Asp.net mvc 知多少(七)
- 如何在ASP.NET中使用列表<>集合作为Repeater数据源与C#
- 如何在ASP.Net Core MVC中使用HTML链接?
- 实体框架 – EF 7中的db.database.ExecuteSQLCommand等效项
- asp.net – WebMethod以JSON格式返回值
- 模型 – 视图 – 控制器 – MVC控制器索引有时404?
- asp.net-core – 将命名空间添加到ASP.NET MVC 6中的所有视
- asp.net-mvc – 是否违反命令查询分离命令运行查
- asp.net后台cs中的JSON格式变量在前台Js中调用方
- asp.net-mvc-3 – FluentValidation – 验证跨多
- asp.net-mvc – 使用ASP.NET MVC中绝对路径访问视
- asp.net – 在GridViewTemplate字段TextBox中对齐
- asp.net-core – 我需要在ASP.NET Core for Cach
- asp.net-web-api – Web API ODataResult始终序列
- asp.net-mvc – 使用带有IEnumerable的Html.Edit
- asp.net – 使用Web部署参数时,使用web.config中
- asp.net-mvc – 通过F#代码迭代插入ASP.NET MVC4