前言

在上一个文章中,我们介绍了一下LabVIEW中AF的基本概念,本讲将以上一次的例子来讲解LabVIEW中的实现

正文

范例说明

假定两个人,一个作为老师,一个作为学生。学生每天早上给老师发送一封邮件,而老师给其一个反馈

这里将有这样一些沟通的要点:

1. 学生通过邮件沟通,并且一旦发送邮件,会话即开始,无法停止
2. 老师收到邮件后即进行对应的动作
3. 老师收到邮件后必然会反馈一封邮件
4. 学生可以在任何时候接收返回的邮件
5. 学生将不再存在一直阻塞等待的问题

通过这个例子,我们理解Actor Model在解决消息发送中的流程

LabVIEW实现-Actor建立

在这个例子中,我们需要建立两个Actor,分别称之为Student与Wise Teacher

通过上一个文章的操作,我们已经建立了Student的Actor
为此需要再次建立Wise Teacher的Actor作为消息的接收方

完成建立后的Wise Teacher Actor如下图所示

 
为Teacher建立静态的Quote Response 的方法,这里选择 VI From Static Dispatch Template,
 

由于Teacher发送消息的时候需要指定接收Student的地址,所以需要提供Student的Message

  为这个Quote Response 创建一个消息

LabVIEW实现-Message沟通机制

由于Actor都必须要启动和停止,所以我们在LaunchVI中设计Actor的启动停止机制
 
这样子我们就配置好了Actor的工作环境,接下来设计交流通讯的方式

 由于Student需要给Wise Teacher发送消息,所以Student需要知道Teacher的Message地址,这里也即我们的Message的队列
将Message的类放置于Student的私有数据
 
 
当需要外部访问Student的数据时,需要设计Member Access的接口

 这里创建Teacher Message的访问,对外界提供只可以写入的方法

 这里创建完成后可以看到Write Teacher Message.vi,可以用来写入Message数据

 
我们在启动Student的时候,将Teacher的Message写入到Student中去

 在执行Request Quote的时候,可以设置发送Teacher的消息
 
 这样,我们的Teacher即可收到Student发送来的消息,不妨将老师收到的消息设置为弹窗, 查看是否收到Message
 我们不妨设计 一个Send Message To Teacher的触发,当点击按钮时,发送消息,如果老师收到消息,则会提示弹窗
实际运行即弹出了窗口,证明老师成功收到了邮件
 
 

LabVIEW实现-Student接收Teacher的Message

为了定义Student接收到Teacher的Message行为,我们为Student设计Receive Teacher Back Message方法以及对应的Message
这里设计该VI弹窗,代表通讯结束
 
在Teacher接收到消息后,我们将弹窗修改为Student的Send Receive Teacher Back Message

 
至此,完成了所有的通讯过程,完成了目标设计
 

结语

本文通过简单的Demo,实现了下图所示的流程,容我思考一会儿.....
 

[LabVIEW架构]ActorFramework(二)的更多相关文章

  1. [LabVIEW架构]ActorFramework(一)

    前言 小黑结婚回来第二周了,每天忙于程序设计,时间比较紧张,所以文章一直没出来,也算憋大招了. 近期小黑将与大家一起认识一下ActorFramework,既是对自己一段时间写AF程序的总结,也是梳理, ...

  2. Redis缓存项目应用架构设计二

    一.概述 由于架构设计一里面如果多平台公用相同Key的缓存更改配置后需要多平台上传最新的缓存配置文件来更新,比较麻烦,更新了架构设计二实现了缓存配置的集中管理,不过这样有有了过于中心化的问题,后续在看 ...

  3. Linux集群架构(二)

    Linux集群架构(二) 目录 八.LVS DR模式搭建 九.keepalived + LVS 十.扩展 八.LVS DR模式搭建 1.实验环境: 四台机器: client: 10.0.1.50 Di ...

  4. LAMP架构(二)

    第十八次课 LAMP架构(二) 目录 一.Apache默认虚拟主机 二.Apache用户认证 三.域名跳转 四.Apache访问日志 五.访问日志不记录静态文件 六.访问日志切割 七.静态元素过期时间 ...

  5. InnoDB体系架构(二)内存

    InnoDB体系架构(二)内存 上篇文章 InnoDB体系架构(一)后台线程 介绍了MySQL InnoDB存储引擎后台线程:Master Thread.IO Thread.Purge Thread. ...

  6. Mybatis架构原理(二)-二级缓存源码剖析

    Mybatis架构原理(二)-二级缓存源码剖析 二级缓存构建在一级缓存之上,在收到查询请求时,Mybatis首先会查询二级缓存,若二级缓存没有命中,再去查询一级缓存,一级缓存没有,在查询数据库; 二级 ...

  7. slf4j 之logback日志之sl4j架构【二】

    一.整体介绍 介绍: The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for v ...

  8. LabVIEW(十二):VI本地化-控件标题内容的修改

    一.对于一般LabVIEW的学习,很少遇到本地化的问题但是我们经常会遇到界面控件标题的显示问题.由于各个技术领域的专业性,往往用户对VI界面的显示有自己的要求,其中就包括控件的标题问题,这可以理解成本 ...

  9. Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程

    Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理.需要解决的问题有监听.协议以及处理器映射等等. 一.Connector设计   Connector要实现的 ...

随机推荐

  1. Django+haystack实现全文搜索出现错误 ImportError: cannot import name signals

    原因是在你的settings.py或者其他地方使用了  "import haystack" 当我们使用django-haysatck库时,表面上会有haystack库,但实际上并不 ...

  2. [洛谷P4592][TJOI2018]异或

    题目大意:有一棵$n$个点的树,第$i$个点权值为$w_i$,有两种操作: $1\;x\;y:$询问节点$x$的子树中与$y$异或结果的最大值 $2\;x\;y\;z:$询问路径$x$到$y$上点与$ ...

  3. POJ3090:Visible Lattice Points——题解

    http://poj.org/problem?id=3090 题目大意:你站在(0,0)的点上看向第一向限的点,点和点会互相阻挡,问最多看到多少点. 很容易想到,我们能看到的点,它的横纵坐标一定是互质 ...

  4. [Leetcode] search in rotated sorted array 搜索旋转有序数组

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e.,0 1 2 4 5 6 7might ...

  5. 洛谷 P4735 最大异或和 解题报告

    P4735 最大异或和 题目描述 给定一个非负整数序列\(\{a\}\),初始长度为\(N\). 有\(M\)个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数\(x\),序列的 ...

  6. 征战jQuery

    一:jQuery的用途 1>.访问 和 操作 DOM元素 2>.控制 页面样式 3>.对页面事件的处理 4>.方便的使用jQuery插件 5>.与Ajax技术的完美结合 ...

  7. de4dot 用法

    使用de4dot反混淆一下 用法 de4dot -f input.dll -o output.dll

  8. bzoj2120: 数颜色(BIT套主席树+set/分块)

    带修改的 HH的项链. 带修改考虑用BIT套主席树,查区间里有几个不同的数用a[i]上次出现的位置pre[i]<l的数有几个来算就好了. 考虑怎么修改.修改i的时候,我们需要改变i同颜色的后继的 ...

  9. NOIP2016Day2T3愤怒的小鸟(状压dp) O(2^n*n^2)再优化

    看这范围都知道是状压吧... 题目大意就不说了嘿嘿嘿 网上流传的写法复杂度大都是O(2^n*n^2),这个复杂度虽然官方数据可以过,但是在洛谷上会TLE[百度搜出来前几个博客的代码交上去都TLE了], ...

  10. Dalvik虚拟机中DexClassLookup结构解析

    http://blog.csdn.net/roland_sun/article/details/46877563 原文如下: 在Android系统中,所有的类定义以及具体的代码都是包含在DEX文件中的 ...