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

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

相关文章
|
7月前
|
缓存 安全 Java
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
|
15天前
|
Java
【专栏】Java多线程中,锁用于控制共享资源访问,确保数据一致性和正确性,锁是什么意思,有哪些分类?
【4月更文挑战第28天】Java多线程中,锁用于控制共享资源访问,确保数据一致性和正确性。本文探讨锁的概念、作用及分类:乐观锁与悲观锁、自旋锁与适应性自旋锁、公平锁与非公平锁、可重入锁和读写锁。使用锁需注意避免死锁、合理选择锁粒度及性能优化。理解锁有助于提升多线程编程的效率和稳定性。
|
2月前
|
算法 安全 Unix
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
36 0
|
4月前
|
前端开发 IDE 开发工具
WxPython 4.0.4多线程访问UI
WxPython 4.0.4多线程访问UI
29 0
|
9月前
|
存储 开发框架 .NET
ASP.NET Core SignalR系列之Hub教程
ASP.NET Core SignalR系列之Hub教程
119 0
|
9月前
|
安全 调度 Python
【从零学习python 】80.线程访问全局变量与线程安全问题
【从零学习python 】80.线程访问全局变量与线程安全问题
60 0
|
9月前
|
安全 Python
【从零学习python 】79. 线程访问全局变量与线程安全问题
【从零学习python 】79. 线程访问全局变量与线程安全问题
49 0
|
10月前
|
移动开发 开发框架 网络协议
WPF+ASP.NET SignalR实现动态折线图
WPF+ASP.NET SignalR实现动态折线图
86 0
|
10月前
|
存储 开发框架 .NET
WPF+ASP.NET SignalR实现后台通知
WPF+ASP.NET SignalR实现后台通知
83 0
|
10月前
|
开发框架 前端开发 JavaScript
WPF+ASP.NET SignalR实现简易在线聊天功能
WPF+ASP.NET SignalR实现简易在线聊天功能
137 0

相关实验场景

更多