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页面,模拟通知各个客户端,如下图:


好了,这个也是本篇课程所讲的主要东西,虽然不显眼,但是在真实环境中对您确实非常的有帮助~~~

时间: 2024-09-08 21:37:52

asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection的相关文章

asp.net signalR 专题—— 第四篇 模拟RPC模式的Hub操作

在之前的文章中,我们使用的都是持久连接,但是使用持久连接的话,这种模拟socket的形式使用起来还是很不方便的,比如只有一个唯一的 OnReceived方法来处理业务逻辑,如下图: 1 protected override Task OnReceived(IRequest request, string connectionId, string data) 2 { 3 return Connection.Broadcast(data); 4 } 但是在singlaR体系中并不是这样,我们还有更加

asp.net signalR 专题—— 第二篇 对PersistentConnection持久连接的快速讲解

上一篇我们快速的搭建了一个小案例,但是并没有对其中的方法进行介绍,这一篇我来逐一解析下. 一:从override的那些方法说起 不管怎么样,我们先上代码,如下: public class MyConnection1 : PersistentConnection { protected override Task OnConnected(IRequest request, string connectionId) { return Connection.Send(connectionId, "We

asp.net signalR 专题—— 第一篇 你需要好好掌握的实时通讯利器

一:背景 我们知道传统的http采用的是"拉模型",也就是每次请求,每次断开这种短请求模式,这种场景下,client是老大,server就像一个小乌龟任人摆布, 很显然,只有一方主动,这事情就没那么完美了,所以为了能够让server也能主动点,html5就应运而生了,或许大家都知道html5中有两种server的主动 模型,第一种叫做websockect,也就是基于tcp模式的双工通讯,还有一种叫做SSE,也就是客户端来订阅服务器的一种事件模型,当然了,在html5出 来之前,如果要做

学习 ASP.NET MVC (第三回)实战篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 创建Controllers和Views我们再次回顾下ASP.NET MVC的基本工作流程:URL-->Controller(会执行一个方法Action)-->从数据库中获取一个Model对象-->将Model作为ViewData传递给V

ASP.NET自定义控件组件开发 第一章 第三篇

第三篇:第一章的完结篇 相信大家看了前几篇文章后应该觉得自定义控件很简单,无非就是把一大堆的html代码包装一下就行 了.不错,前几篇写的控件确实很简单.不知道大家想过没有,难道我们每次写控件都要大费力气的把一 大堆的html代码写进去吗. 不知道大家试了没有:如果在write.Write()方法中写的html代码有了错误,如果把<table..> 写成了<talbe..>,在编译的时候,编译器是不会发现错误,但是当我们把控件拖上来使用的时候 ,就发现控件的呈现错误.就是说,这样的

走向ASP.NET架构设计第三章:分层设计,初涉架构(后篇)

接上篇 4.数据访问层设计 数据访问层,这块要说的不多.但是要澄清一点:数据访问不一定就是访问数据库,虽然多数的情况下,我们确实把数据存储在数据库中. 这里我们用数据库存储数据,并且用Linq To Sql来进行数据访问操作. 下面我们就来实现数据操作的一些代码: public class ProductRepository : IProductRepository { public IList<Model.Product> FindAll() { var products = from p

Asp.net SignalR快速入门_实用技巧

今天的专题就是让大家可以快速的上手Asp.net SignalR.废话不多说了,下面正式进入今天专题的内容. 二.Asp.net SignalR 是个什么东东  Asp.net SignalR是微软为实现实时通信的一个类库.一般情况下,SignalR会使用JavaScript的长轮询(long polling)的方式来实现客户端和服务器通信,随着Html5中WebSockets出现,SignalR也支持WebSockets通信.另外SignalR开发的程序不仅仅限制于宿主在IIS中,也可以宿主在

ASP.NET 安全认证(三): 用Form 表单认证实现单点登录

asp.net|安全 "等了好久终于等到今天,写了好久终于就快完结,但是网友的反应却让我有一些的伤心.盼了好久终于盼到今天,忍了好久终于把此文撰写,那些受冷落的无奈早就无所谓,累也不说累"(歌词<今天>新演绎).看着人家的 Blog 文章的评论是一条接一条,再瞧瞧自己:"无人问津呐,真-无-奈--唉,没人理我,还是回家吧.""哎,还没开始写,怎么就走了?回去干什么呢?"回去写作业去啊,上回交待的课外作业你做了没?(注:http://b

ASP教程:第十五篇 常用的 ASP ActiveX 组件

当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等,继上篇介绍了 AD Rotator 组件后,本篇将接着给大家介绍其它一些常用的 ASP ActiveX 组件的使用方法. 最近仍有不少朋友来信问我, ASP 是否只能在 Microsoft IIS 上运行,是否可以在非 NT 平台上运作?本来这个问题我已经回答过很多遍了 : 我只是听说过有某种可以支持的软件,却从没见过.但一些热情的朋友仍然孜孜不