首页 > 编程语言 >asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection

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

时间:2023-04-18 12:41:07浏览次数:49  
标签:asp string PersistentConnection connectionId request server signalR override dat

      在前面的两篇文章中,我们讲到的都是如何将消息从server推向client,又或者是client再推向server,貌似这样的逻辑没什么异常,但是放在真实

的环境中,你会很快发现有一个新需求,如何根据第三方系统的数据变化来即时的将新数据推送到各个客户端,比如下面这样:

asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection_其他

ok,原理就是上面的这张图,如果我们Server中的“监控程序”发现有更新,这个时候,监控程序需要将更新的数据送给server程序,然后由server程序

推送到各个客户端,那下面我们该怎么做到呢?

 

一:GlobalHost 属性

     首先我们简单的看一下它的解释,叫做“提供对默认主机信息的访问”,可以看到,这是一个所谓的全局设置,里面的5个属性,个个都非常重要,因为

对他们的设置,影响的都是全局性的,好了,作为这篇我们关注的就是其中之一ConnectionManager属性,如下图:

asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection_ide_02

它呢,就是获取你当前的Connection连接,好了,废话不多说,我们来做一个例子看一看。

 

二:实例演示

1. 伪造“外部系统”

 在这里我就Fake一个单独页面(mytest.aspx),假装从外面获取到了"我是mytest.aspx"这条数据,如下:

asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection_其他_03

 

在上图中,你也看到了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);
        }
    }

asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection_其他_04

现在两个client都开启了,然后各自都收到了server的欢迎信息,以及各自和server通信的标识。

 

3. 访问mytest页面,模拟通知各个客户端,如下图:

asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection_ide_05

 

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

 

标签:asp,string,PersistentConnection,connectionId,request,server,signalR,override,dat
From: https://blog.51cto.com/u_15353947/6202800

相关文章

  • asp.net mvc 之旅 —— 第六站 ActionFilter的应用及源码分析
       这篇文章我们开始看一下ActionFilter,从名字上其实就大概知道ActionFilter就是Action上的Filter,对吧,那么Action上的Filter大概有几个呢???这个问题其实还是蛮简单的,因为我们听说Mvc本身就是一个扩展性极强的框架,自然就是层层有拦截,层层有过滤,对吧,比如我们看到的如下Control......
  • ASP.NET Core设置URLs的几种方法,完美解决.NET 6项目局域网IP地址远程无法访问的问题
    近期在dotnet项目中遇到这样的问题:.net6运行以后无法通过局域网IP地址远程访问。后查阅官方文档。整理出解决问题的五种方式方法,通过新建一个新的WebApi项目演示如下:说明操作系统:Ubuntu22.04.2运行时:.NET6开发工具:VisualStudio2202新建webapi#只需要以下名利即可创......
  • asp.net core系列 26 EF模型配置(实体关系)
    一.概述EF实体关系定义了两个实体互相关联起来(主体实体和依赖实体的关系,对应数据库中主表和子表关系)。 在关系型数据库中,这种表示是通过外键约束来体现。本篇主要讲一对多的关系。先了解下描述关系的术语。(1)依赖实体: 这是包含外键属性的实体(子表)。有时称为ch......
  • ASP.NET Core MVC 从入门到精通之布局
    随着技术的发展,ASP.NETCoreMVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NETCoreMVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NETCoreMVC系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NETCor......
  • 网络安全工程师教你:Kali Linux之Metasploit渗透测试基础(四)
    本分享仅做学习交流,请自觉遵守法律法规!搜索:Kali与编程,学习更多网络攻防干货!下篇文章将在明天下午五点发布,敬请关注!Metasploit渗透测试框架基础(四)一、背景介绍Metasploit就是一个漏洞框架。它的全称叫做TheMetasploitFramework,简称叫做MSF。Metasploit作为全球最受欢迎的工具,不......
  • How to use the Raspberry Pi to study the Linux kernel source code All In One
    HowtousetheRaspberryPitostudytheLinuxkernelsourcecodeAllInOne如何利用树莓派来研究Linux内核源码AllInOnehttps://github.com/torvalds/linux学习笔记在Linux系统中,一切皆文件!(......
  • Raspberry PI 设置开机自启动脚本 All In One
    RaspberryPI设置开机自启动脚本AllInOnedocsraspi-config$sudoraspi-confighttps://www.raspberrypi.com/documentation/computers/configuration.html#raspi-configconfig.txt$cat/boot/config.txt$sudonano/boot/config.txt$sudovim/boot/config.t......
  • Metasploitable3打靶
    metasploitable3一、环境搭建介绍该靶场与2不同,可自定义镜像操作系统,由于版权等原因,该靶场最好使用virtualbox搭建,使用VMware搭建可能会有无法连接网络等问题。考虑需要培养线下无联网实战能力的原因,本次原则上只用kali里自带的工具,下次再推一些好用的工具。本靶机可能内......
  • 一统天下 flutter - widget 容器类(只能有一个子): AspectRatio - 按比例
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget容器类(只能有一个子):AspectRatio-按比例示例如下:lib\widget\container\aspect_ratio.dart/**AspectRatio-按比例*/import'package:flutter/material.dart';......
  • ASP.NET Core MVC 从入门到精通之路由
    随着技术的发展,ASP.NETCoreMVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NETCoreMVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NETCoreMVC系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NETCor......