为了账号安全,请及时绑定邮箱和手机立即绑定

如何从外部线程访问 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 class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="/scripts/jquery-1.10.2.js"></script>    <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="/scripts/jquery.signalR-2.1.2.js"></script>    <!--<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="/signalr/js"></script>-->    <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="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页面,模拟通知各个客户端,如下图:

 

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

 

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消