精华内容
下载资源
问答
  • 行业分类-外包设计-用异步传递方式进行通信速率控制的异步传递方式系统.zip
  • Stream 是一个抽象类,用来表示一个序列的异步数据,Stream流分类: 单订阅流(Single Subscription),这种流最多只能有一个监听器(listener) 多订阅流(Broadcast),这种流可以有多个监听器监听(listener)

    题记
    —— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精。


    Flutter是谷歌推出的最新的移动开发框架。

    【x1】微信公众号的每日提醒 随时随记 每日积累 随心而过

    【x2】各种系列的视频教程 免费开源 关注 你不会迷路

    【x3】系列文章 百万 Demo 随时 复制粘贴 使用


    在 Flutter 中可用于异步通信的方案有如下:


    Stream 是一个抽象类,用来表示一个序列的异步数据,Stream流分类:

    • 单订阅流(Single Subscription),这种流最多只能有一个监听器(listener)

    • 多订阅流(Broadcast),这种流可以有多个监听器监听(listener)

    Stream可以接受任何类型的数据,Stream 有同步流和异步流之分,它们的区别在于同步流会在执行 add,addError 或 close 方法时会立即发送事件,而异步流总是在事件队列中的代码执行完成后再发送事件。

    1 多订阅流

    第一步创建流对象,在这里通过 流控制器 StreamController 来进行操作,下面的文章中会直接称流。

    StreamController<String> streamController = StreamController.broadcast();
    

    第二步设置流监听,业务开发中,设置多个监听,可以分别设置在页面 A、页面B中,然后在页面C中发送更新数据,在这中间需要注意的是添加listen监听后,返回订阅消息对象StreamSubscription,需要在页面销毁时通过 StreamSubscription 对象关闭对应的监听,否则就是造成监听无法移动,形成内存泄漏,核心代码如下代码清单1-1:

    ///代码清单 1-1 
    class TestBPage extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        return _TestBPageState();
      }
    }
    
    class _TestBPageState extends State {
      ///消息订单对象
      StreamSubscription _streamSubscription;
      @override
      void initState() {
        super.initState();
        ///监听二
        _streamSubscription=streamController.stream.listen((event) {
          print("页面B接收到数据 $event");
        });
      }
      @override
      void dispose() {
        super.dispose();
        ///取消监听
        _streamSubscription.cancel();
      }
      ... ... 
    }
    

    StreamSubscription主要用来操作当前的监听事件,一个多订阅流中对应多个事件监听,那么也就会对应有多个 StreamSubscription,那么对于每个单独的事件监听就需要通过 StreamSubscription 对象来操作,详看本文目录3。

    第三步发送数据 ,如点击一个按钮触发或者是网络请求数据结果分发给多个页面,当然这个是以实际业务为准。

    streamController.add("测试数据");
    

    第四步就是在整个流操作使用结束后关闭流

     @override
     void dispose() {
       super.dispose();
       streamController.close();
     }
    

    2 单订阅流

    单订阅流只允许有一个监听,默认使用 StreamController 的构造函数来创建,代码如下:

    ///创建单订阅流控制器
    StreamController<String> streamSingController = StreamController();
    

    然后对其设置监听与多订阅流方式一致:

    class _TestBPageState extends State {
      ///消息订单对象
      StreamSubscription _streamSubscription;
      @override
      void initState() {
        super.initState();
        ///监听二
        _streamSubscription=streamSingController.stream.listen((event) {
          //然后在这里面进行更新数据的操作
          print("页面B接收到数据 $event");
        });
      }
      @override
      void dispose() {
        super.dispose();
        ///取消监听
        _streamSubscription.cancel();
      }
      ... ... 
    }
    

    当再为其添加一个 listen 监听时,会报出异常:

    ════════ Exception caught by widgets library ═══════════════════════
    The following StateError was thrown building Builder:
    Bad state: Stream has already been listened to.
    

    在这里插入图片描述

    3 StreamSubscription

    StreamSubscription主要用来操作当前的监听事件,它提供了一些操作方法如下:
    取消消息订阅,此方法一般用在页面销毁时,执行后,订阅监听不可复用

    @override
    void dispose() {
      super.dispose();
      ///取消消息订阅
      _streamSubscription.cancel();
    }
    
    ///暂停消息订阅
    if(!_streamSubscription.isPaused){
      _streamSubscription.pause();
    }
    
    ///恢复消息订阅
    if(_streamSubscription.isPaused){
      _streamSubscription.resume();
    }
    

    完毕

    展开全文
  • 通俗理解同步通信与异步通信

    万次阅读 多人点赞 2017-03-29 16:35:21
    网络上对同步传输与异步传输的文章一大把,各种图示解说也很多,但看完终归有点一头雾水,本文通俗的来说说这两种通信方式

    网络上对同步传输与异步传输的文章一大把,各种图示解说也很多,但看完终归有点一头雾水,当然了,要想真正透彻地理解这些专业性的概念,最好的方式还是在实践中找到这些概念的体现。


    同步传输与异步传输虽然从名字上来看是两个完全不同的方式,但要知道,他们的目的是相同的,其实他们都是在进行位同步的动作,只不过一个选择了直捣黄龙,而另一个是迂回作战。所以首先应该明确一个思想,如果想理解这两种方式只要理解了他们是在如何进行同步就可以了。


    异步通信:

    异步通信中的接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。发送方发送的时间间隔可以不均,接收方是在数据的起始位和停止位的帮助下实现信息同步的。这种传输通常是很小的分组,比如一个字符为一组,为这个组配备起始位和结束位。所以这种传输方式的效率是比较低的,毕竟额外加入了很多的辅助位作为负载,常用在低速的传输中。

    举个例子,我们的键盘按下一个按键,发出一个字符信号,异步传输机制就会为它加上前后的辅助同步信息,帮助接收方识别到我们按下了哪一个按键。因为我们敲击键盘的节奏不固定,所以异步是一种很适合的方式。


    同步通信:

    同步通信中双方使用频率一致的时钟,它的分组相比异步则大得多,称为一个数据帧,通过独特的bit串作为启停标识。发送方要以固定的节奏去发送数据,而接收方要时刻做好接收数据的准备,识别到前导码后马上要开始接收数据了。同步这种方式中因为分组很大,很长一段数据才会有额外的辅助位负载,所以效率更高,更加适合对速度要求高的传输,当然这种通信对时序的要求也更高。


    总结一下,异步传输其实是通过字符数据前后的开始和停止码进行再同步,弥补自己刚才注意不集中的不足;而同步方式则是一个规矩的好学生,时刻候命准备工作。异步是你扔出去一个内容,对方靠着内容前后他能嗅到的异样在人潮之中发现了它,把这个内容存下来;而同步是对方在时刻等着你发布号令,你告诉对方我要发送了哦,然后双方一拍即合。

    展开全文
  • 同步和异步通信

    千次阅读 2019-04-07 14:59:14
    在串行通信中,可以分为两种类型,一种叫同步通信,另一种叫异步通信。 1.同步通信 (1)同步通信要求双方共用一个的时钟,总线上按照统一的时序和周期完成信息传输。 (2)同步通信将许多字符组成一个信息组,这个...

    在串行通信中,可以分为两种类型,一种叫同步通信,另一种叫异步通信。
    1.同步通信
    (1)同步通信要求双方共用一个的时钟,总线上按照统一的时序和周期完成信息传输。
    (2)同步通信将许多字符组成一个信息组,这个信息组分成一个个字符进行传输,同步字符加在信息组中,而不是每一个字符。
    (3)在同步传输中,需前约定一个字符可以对应N位(一般是5-8)位。且在同一个传输过程中,发送和接收按同样的数位进行解析。
    (4)在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。常见的同步通讯有IIC、SPI.

    2.异步通信
    (1)异步通信每传输一个字符,都包含起始位和停止位。字符之间没有固定的时间要求。
    (2)接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。
    (3)异步通加入了辅助位作为负载,常用在低速的传输中。在一般情况下,采用中断的接收数据。例如232/485串口通讯。

    实际应用场景中,同步通讯的数据信号所传输的内容绝大部分是有效数据,而异步通讯中会则会包含数据帧的各种标识符,所以同步通讯效率高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大。
    总的来说:
    1.同步通信效率较高,异步通信较低;
    2.同步通信较为复杂,对双方时钟要求较高;异步通信简单可允许一定的误差。
    3.同步通信可用于点对多点,而异步通信适用于点对点。

    展开全文
  • 异步通信原理解析

    千次阅读 2018-09-22 09:32:39
    UART:异步传输器 TTL:晶体管-晶体管-逻辑电平 RS232:一种全双工通信格式 RS485:一种半双工通信格式 串口通信常见的名词就是上面几位,真正的承担串口通信的是UART,TTL/232/485只是电平定义不同。因此研究串口...

    UART TTL RS232 RS485

    • UART:异步传输器
    • TTL:晶体管-晶体管-逻辑电平
    • RS232:一种全双工通信格式
    • RS485:一种半双工通信格式

    串口通信常见的名词就是上面几位,真正的承担串口通信的是UART,TTL/232/485只是电平定义不同。因此研究串口通信主要是明白UART的工作原理。

    UART:

    UART结构框图
    由上面的UART结构框图我们可以看到,一个UART包括发送缓冲区S-SBUF,接收缓冲区R-SBUF,发送端口SEN,接收端口RCV,发送完成置位TI,接收完成置位RI。当然UART包含的不止这些,还有设置寄存器与时钟输入,不过仅就理解其原理而言,前面几个就够了。
    那么具体怎么用UART呢?当我们需要发送数据的时候,只需要将数据放到S-SBUF里面,在UART检测到信息进入S-SBUF后,会自动将数据按位传送到SEN引脚上,数据发送就完成了。但是为了便于对端RCV引脚接收,UART在发送数据时会遵循一个约定俗成的规律,为什么这么做呢,细心的朋友可能注意到了,当传输结束时,SEN会将引脚拉倒高电平,此后会一直保持高电平的状态直到下次数据传输前,那么我在传输前将SEN拉倒低电平可以告诉对端RCV我现在已经准备传输数据了,让其做好接受准备。RCV在接受到负跳变以后,就启动接收数据的工作。我们也将其启动时的低电平称为起始位,结束时的高电平称为终止位。

    RS232

    RS232的通信原理与UART一模一样,实际上,232芯片仅仅起到了一个电平转换的过程,即将0v上升到3到15v,将5V下降到-3到-15v。
    232通信框架

    RS485

    RS485与232存在区别,虽然本质上还是UART的通信原理,但是将全双工变成了半双工。
    485通信框架
    从上图中可以看到,不管是SEN还是RCV数据,都会同时将A/B两个通信线占用,这就意味着我们在同一时间段内只能选择发送数据,或者接受数据。二选一,不能同时发送接受。485芯片给我们提供了一个引脚用来控制此时刻我们是选择发送,还是选择接受。

    这个时候考虑以下几种情况:

    1. 左发送,右接受:OK 没问题。
    2. 左接受,右发送:OK 没问题。
    3. 左接受,右接受:这个时候相当于总线空闲,也没问题。
    4. 左发送,右发送:这个时候就出现问题了,会出现通信线电平竞争,通信崩溃

    那么如何避免电平竞争,那就必须保障在同一时刻只有一端发送数据。如何做到这一点,有两种办法:一是以量保质;二是以效保质。

    以量保质

    以量保质的意思是给每一端安装两个UART与RS485,其中一个专门用来发送,另一个专门用来接收。

    以效保质

    以效保质的意思是我们给总线上连接的所有设备定一个管理者,这个管理者享有总线的控制权,由它来依次给各个设备发送通信质量,然后各个设备来回应,这个管理者就是我们通常所说的主站,其他设备统称从站。
    这个时候还有一个问题就是我们怎么保障主站从站不会同时发送数据能,这时候可以在程序上进行设定,我们在主站发送数据后设置一段等待时间,这个时间应该足够从站处理并返回数据,在等待时间内,主站将不会再发送任何数据。如果过了等待时间后从站依旧未返回信息,那么可以发出报警信号,提示该从站的通信出现异常。

    展开全文
  • 什么是异步通信?很简单,一旦设备准备好,就主动通知应用程序,这种情况下应用程序就不需要查询设备状态,就像硬件上常提的“中断的概念”。比较准确的说法其实应该叫做“信号驱动的异步I/O”,信号是在软件层次上对...
  • 同步是指:发送方发出数据后,【等接收方发回响应】以后才发下一个数据包的通讯方式。 异步是指:发送方发出数据后,【不等接收方发回...在数据中根据所添加的标记信号位的不同方式,分成同步通信和异步通信两种。 ...
  • 单工:在通信过程的任意时刻,信息只能从A方传到B方。 半双工:在通信过程的任意时刻,信息既能从A方传到B方,又能从B方传到A方,但是不...异步通信:不带时钟同步的。例:UART 同步通信:带时钟同步的。例:I2C、SPI
  • C# Socket编程 同步以及异步通信

    万次阅读 2018-11-23 16:04:09
    套接字简介:套接字最早是Unix的,window是借鉴过来的。TCP/IP协议族提供三种套接字:流式、数据报式、原始套接字。...打开通信通道,告诉本地机器,愿意在该通道上接受客户请求——监听,等待客户请求——接受...
  • 11.90 积分第六章 系统总线第一节 总线的基本概念一、总线的分类1.总线:计算机中连接功能单元的公共线路,是一束信号线的集合,包括数据总线、地址总线和控制总线。2.系统总线:连接计算机系统中各个功能模块或...
  •  自主研发异步通信框架Minma(支持长连接和短连接)  2012-03-07 16:51:57| 分类: J2SE技术 | 标签:nio ...该框架采用Java NIO的核心技术,实现了基于事件驱动的多线程异步通信框架,支持常见的长
  • 消息中间件 MQ 企业级方案设计,第 1 部分: 异步通信与负载均衡 本系列以使用 IBM 大型机服务器的客户为主要对象,探讨如何应用 WebSphere MQ 的特性来实现企业级应用的业务需求。本文是第 1 部分,将为大家介绍...
  • Socket嵌套字同步异步通信的原理

    千次阅读 2012-02-15 10:40:44
    套接字简介: 套接字最早是Unix的,window是借鉴过来的。TCP/IP协议族提供三种套接字:流式、数据报式、原始套接字。...打开通信通道,告诉本地机器,愿意在该通道上接受客户请求——监听,等待客户请求
  • 串行通信——异步串行通信

    千次阅读 2019-03-23 16:06:08
    II、异步串行通信详解 一、数据格式 1. 起始位 2. 数据位 3. 奇偶校验位 4. 停止位 二、通信制式 1. 单工 2. 半双工 3. 全双工 三、通信速率 I、串口通信简介 一、定义 在一条传输线上,数据以“位”...
  • 通信方式

    2021-05-10 11:14:01
    一、通信分类 串行通信 :一位一位传输 速度慢 抗干扰能力强 但是占用资源少 成本低 FSMC 并行通信:一起传输 多接口 速度快 占用资源多 但是抗干扰能力弱 成本高 ...1.异步通信双方之间没有SC...
  • 单片机各种通信方式的特点和主要应用场合 串口用的比较多: RS232,用于与标准的RS232设备通讯 网卡,用于互联网或采用网卡端口的设备通讯 I2C,用于单片机自己外设或多个单片机之间通讯 CAN,工业标准,汽车中...
  • 本系列以使用 IBM 大型机服务器的客户为主要对象,探讨如何应用 WebSphere MQ 的特性来实现企业级应用的业务...本文是第 1 部分,将为大家介绍异步通信与同步通信的特点以及如何设计具有高可用性和负载均衡能力的 MQ...
  • JAVA NIO异步通信框架MINA选型和使用的几个细节(概述入门,UDP, 心跳) 博客分类:  NIO  Apache MINA 2 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架。它提供了一个抽象的事件驱动的...
  • 通讯的方式分类: 1.并行通信:是指数据的各位同时在多根数据线上发送或接收。如下图 并行通信的特点:控制简单,传输速度快;...串行通信方式分类 在串行通信中,根据对数据流的分界、定时以及同步方案方法...
  • 说到缓存,我想大家跟我一样都很兴奋,当我们遭遇网站性能瓶颈的时候,缓存是一剂强心针,也是一粒紧急...一:缓存的种类  要说缓存有多少种,太多了,比如浏览器缓存,文件缓存,片段缓存,数据库缓存等等,合理
  • 同步通信是按照软件识别同步字符来实现数据的发送和接收,异步通信是一种利用字符的再同步技术的通信方式。  同步通信  同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步...
  • 数据通信的基本方式根据数据的传输方式可以分为串行通信与并行...串行通信又根据数据的同步方式,分为异步传送和同步传送两种方式。或者根据数据的传输方向与时间关系,分为单工通信、半双工通信及全双工通信三种方式
  • 2.总线如何分类?什么是系统总线?系统总线又分几类?它们各有何作用?是单向的还是双向的?它们与机器字长、存储字长、存储单元有何关系? 答:按照连接部件的不同,总线可以分为片内总线、系统总线和通信总线。 ...
  • 行业分类-电器装置-基于无线通信模式的三相异步电机降温及保护装置.zip
  • 行业分类-设备装置-分布式异步传输模式中继媒体网关间实现通信的方法.zip
  • 一般硬件通信分类方式

    千次阅读 2017-03-04 12:25:08
    我们知道硬件通讯主要就是两个设备之间的交流,这里就做下简单的介绍。 而通信可以分为并行通信和串行通信 ...通信方式可以分为:全双工、半双工、单工 - 单工通信 只能接受或者发送 收音机 遥

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,133
精华内容 22,453
关键字:

异步通信方式的种类