asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection
在前面的两篇文章中,我们讲到的都是如何将消息从server推向client,又或者是client再推向server,貌似这样的逻辑没什么异常,但是放在真实
的环境中,你会很快发现有一个新需求,如何根据第三方系统的数据变化来即时的将新数据推送到各个客户端,比如下面这样:
ok,原理就是上面的这张图,如果我们Server中的“监控程序”发现有更新,这个时候,监控程序需要将更新的数据送给server程序,然后由server程序
推送到各个客户端,那下面我们该怎么做到呢?
一:GlobalHost 属性
首先我们简单的看一下它的解释,叫做“提供对默认主机信息的访问”,可以看到,这是一个所谓的全局设置,里面的5个属性,个个都非常重要,因为
对他们的设置,影响的都是全局性的,好了,作为这篇我们关注的就是其中之一ConnectionManager属性,如下图:
它呢,就是获取你当前的Connection连接,好了,废话不多说,我们来做一个例子看一看。
二:实例演示
1. 伪造“外部系统”
在这里我就Fake一个单独页面(mytest.aspx),假装从外面获取到了"我是mytest.aspx"这条数据,如下:
在上图中,你也看到了GetConnectionContext方法是接受一个泛型的参数,而这个“泛型参数”,就是你的PersistentConnection实现类,这里也就
是MyConnection1,当然这里不光可以访问Persistent,还可以访问Hub类,这个我们放到后续和大家讲解。
2. 开启两个客户端
开启这两个就是为了连接到我们的server,假装多用户,也就是PersistentConnection类,如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta charset="utf-8" />
</head>
<body>
<script src="/scripts/jquery-1.10.2.js"></script>
<script src="/scripts/jquery.signalR-2.1.2.js"></script>
<!--<script src="/signalr/js"></script>-->
<script src="scripts/myjs.js"></script>
<script type="text/javascript">
var conn = $.connection("/myconnection"); conn.start().done(function (data) {
console.log(data.id);
}); conn.received(function (data) {
console.log(data);
}); </script>
</body>
</html>
public class MyConnection1 : PersistentConnection
{
protected override Task OnConnected(IRequest request, string connectionId)
{
Debug.WriteLine("OnConnected");
return Connection.Send(connectionId, "Welcome!");
} protected override Task OnReceived(IRequest request, string connectionId, string data)
{
Debug.WriteLine(data);
return Connection.Send(connectionId, data);
} protected override Task OnDisconnected(IRequest request, string connectionId, bool stopCalled)
{
Debug.WriteLine("OnDisconnected");
return base.OnDisconnected(request, connectionId, stopCalled);
} protected override Task OnReconnected(IRequest request, string connectionId)
{
Debug.WriteLine("OnReconnected");
return base.OnReconnected(request, connectionId);
}
}
现在两个client都开启了,然后各自都收到了server的欢迎信息,以及各自和server通信的标识。
3. 访问mytest页面,模拟通知各个客户端,如下图:
好了,这个也是本篇课程所讲的主要东西,虽然不显眼,但是在真实环境中对您确实非常的有帮助~~~
asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection的更多相关文章
- asp.net signalR 专题—— 第四篇 模拟RPC模式的Hub操作
在之前的文章中,我们使用的都是持久连接,但是使用持久连接的话,这种模拟socket的形式使用起来还是很不方便的,比如只有一个唯一的 OnReceived方法来处理业务逻辑,如下图: protected ...
- asp.net signalR 专题—— 第二篇 对PersistentConnection持久连接的快速讲解
上一篇我们快速的搭建了一个小案例,但是并没有对其中的方法进行介绍,这一篇我来逐一解析下. 一:从override的那些方法说起 不管怎么样,我们先上代码,如下: public class MyConn ...
- asp.net signalR 专题—— 第一篇 你需要好好掌握的实时通讯利器
一:背景 我们知道传统的http采用的是“拉模型”,也就是每次请求,每次断开这种短请求模式,这种场景下,client是老大,server就像一个小乌龟任人摆布, 很显然,只有一方主动,这事情就没那么完 ...
- ASP.NET SignalR 系列(三)之代码实现
说在前头: 因SignalR默认采用camel的编码规范,故前端调用后端的对象或者方法时,首字母均需要小写 创建集线器 创建完,文件中默认创建了一个不带参数Hello方法的示例,我们修改一下,带个参数 ...
- PerfView专题 (第三篇):如何寻找 C# 中的 VirtualAlloc 内存泄漏
一:背景 上一篇我们聊到了如何用 PerfView 去侦察 NTHeap 的内存泄漏,这种内存泄漏往往是用 C 的 malloc 或者 C++ 的 new 分配而不释放所造成的,这一篇我们来聊一下由 ...
- asp.net微信开发第三篇----自定义会话管理
和微信用户的沟通少不了,总觉得看起来微信官网后台管理中的会话回复消息有点呆板,所以我这里就自定义了一个会话管理功能,最终效果图如下: 因为我试使用富文本文件CKEDITOR来进行编写,你看到稳中可能会 ...
- (转)SpringBoot非官方教程 | 第三篇:SpringBoot用JdbcTemplates访问Mysql
本文介绍springboot通过jdbc访问关系型MySQL,通过spring的JdbcTemplate去访问. 准备工作 jdk 1.8 maven 3.0 idea mysql 初始化mysql: ...
- SpringBoot非官方教程 | 第三篇:SpringBoot用JdbcTemplates访问Mysql
转载请标明出处: 原文首发于https://www.fangzhipeng.com/springboot/2017/07/11/springboot3-JdbcTemplates-Mysql/ 本文出 ...
- 第三篇:SpringBoot用JdbcTemplates访问Mysql
本文介绍springboot通过jdbc访问关系型mysql,通过spring的JdbcTemplate去访问. 准备工作 jdk 1.8 maven 3.0 idea mysql 初始化mysql: ...
随机推荐
- 分享一下刚刚HP电话面试。。。。。。。。我估计我挂了,不过还是要来分享一下
面试官是个中国人,给我是全英文面试,总之是做HP的外包业务,说得很好的工作环境,里面都是一些老外在工作. 首先是要用英文介绍了下自己,我自己觉得自己也还是不错的吧,然后就说了一通(其实我好久没说英文了 ...
- 何谓Restful
引言 用过ASP.NET WebApi2.0, 上次去面试被问到什么是Restful ,一时间竟不知道从何说起,所以搜集资料,做个备注,有时间好多来看看加深理解. 什么是Restful 一种软件架构风 ...
- webmagic的设计机制及原理-如何开发一个Java爬虫
之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方 ...
- .net 实现Office文件预览 Word PPT Excel 2015-01-23 08:47 63人阅读 评论(0) 收藏
先打个广告: .Net交流群:252713569 本人QQ :524808775 欢迎技术探讨, 近期公司要求上传的PPT和Word都需要可以在线预览.. 小弟我是从来没有接触过这一块的东西 感觉很棘 ...
- 基于OBS的插件开发总结
一.介绍 OBS(Open Broadcaster Software)是一个广泛使用的视频录制直播软件.利用该软件可以实现桌面窗口.游戏.网页.RTMP流.图像等的录制直播.OBS也是一个开放源代码的 ...
- cookie设置保存用户名,填入中文名之后出现的错误500问题
对于问题发生的原因以后再来补充: 解决方法就是在dologin.jsp当中使用URLEncode工具类,这个工具类在java的net包当中 <一>用户浏览器-->jsp 的过程 1 ...
- 最短路径之Floyd算法
Floyd算法又称弗洛伊德算法,也叫做Floyd's algorithm,Roy–Warshall algorithm,Roy–Floyd algorithm, WFI algorithm. Floy ...
- php实现设计模式之 原型模式
<?php /* * 原型模式:通过复制已经存在的对象来创建新对象. * 通过原型实例指定创建对象的种类,并且通过copy这些原型创建信的对象 * 是创建型模式 * 有的时候创建一个对象有很多步 ...
- android largeheap 的设定
现在公司在做tv端的APP,我的任务是视频点播功能,在看公司原有代码的基础上看到在manifiest里面设置了largeheap,所以查阅了一下资料,作为笔记 http://blog.csdn.net ...
- JSP利用Hibernate实现对数据库的CRUD ——开发环境Myeclipse与SQL Server 2008
一.首先先建立一个Web Project 二.然后在程序根目录建立文件夹“DataBase”和“Doc”,分别存放数据库文件和保存SQL语句,建完如下所示: 三.建立数据库“dbHibernate”, ...