大数跨境
0
0

开发者培训那些事儿(陆) —— 课程内容简介(中)

开发者培训那些事儿(陆) —— 课程内容简介(中) 汇智众享
2024-06-30
2
导读:课程内容介绍(二)


前情回顾

前文介绍了 Niagara 开发者课程中开始阶段的部分内容,包括:Niagara 总体介绍,软件架构介绍,定位符和开发环境搭建等内容,总体来说前面的课程还是比较轻松的,练习和作业都比较少,从第一天下午开始强度就慢慢上来了。


关于课堂练习的总体建议


真正的 coding 开始了,此后的所有练习都会涉及到代码的编写。下面我针对这些课堂练习做一些说明。Niagara 所有课程中的练习都是非常经典,非常有代表性的,对于初学者来说,不仅仅是作为课堂练习,它们是值得在课后反复揣摩和复习的。课堂上拿到每个练习,不要着急按照操作指导去一步步操作,如果仅仅是这样的话,那与一个5岁儿童照着说明书组装乐高玩具无异。每个人按照步骤操作都可以完成,这也是我在课堂上反复强调的。学员们总是担心赶不上进度,无法继续后面的课程和练习,这个心情能够理解,但是,开始每个练习之前还有更重要的事情要做,那就是:


  • 明确这个练习的目的是什么

  • 练习中涉及到的关键知识点有哪些

  • 完成后的效果是什么


尤其是那些对 Java 不是太熟悉的朋友:千万不要纠结于某几行代码的细节,只要知道某段代码实现了什么功能即可。


这样的方式不但有利于很好地理解课堂讲解的内容和练习,更有利于通过考试。考试过程中,你需要根据考题中描述的功能要求,能否快速找到练习中相应部分的代码做参考,决定了你答题的快慢。题量挺大的,时间很重要。


那么我们以一个练习为例,来说说开发者课程中,开始练习之前要做的这些事情。它明确地写在了每个练习前面,可能是英文的缘故,也可能是时间紧的缘故,课堂上很少有学员仔细阅读这些内容。



以5.2练习的内容为例说明上述方法:


  • 首先,练习的目的是希望将(二次)开发的异步 action,放在主线程之外去执行,以防止这个 action 耗费过多时间,影响主线程做重要的事情。实现方法是定义一个 worker 线程,然后通过 post 方法将 action 发到 worker 线程执行。


  • 其次,关键知识点包括:主线程 Control Engine;异步 action;worker 线程,post 方法。


  • 最后,练习的效果是:通过两种方式的对比,发现独立的 worker 线程确实有助于解放主线程。具体来说就是定义一个很耗时的 action (sleep),如果把它放到主线程,就会导致 Niagara 操作卡死。如果将其放到 worker 线程,所有的用户交互都仍然流畅,不受影响。



回到课程



4. 模块开发

Module Development


这一节主要包括:


  1. 搭建开发环境,如何导入并引用 Niagara 的 jar 包,如何导入外部 jar 包等

  2. 如何将 module 中的组件呈现在 palette 上

  3. 基于 java annotation 的代码自动生成,slot-o-matic

  4. hello world 程序的创建和编译

  5. 常用的 Niagara 数据类型,比如,用来显示带有状态数值的 BStatusValue;绝对时间(BAbsTime),如年月日时分秒;相对时间(BRelTime),如半小时,15分钟; 类似于JSON 的键值对 BFacet 等等。


学习建议


这部分内容其实非常简单,但也是最重要的。如果课上卡在了环境搭建的地方,我建议你直接让老师帮你解决,没必要自己花过多时间。开发环境是每个程序员在开始编程前都必须要做的事情,hello world 无法运行,其他的都免谈。这一节中关于 palette 编辑其实是挺麻烦,很容易出错的,但还好有些小技巧,在课上重点听这部分内容,最好记下来,时间长了容易忘。


5. 多线程 

Niagara Runtime

1

远程数据同步 (Remote Programming

本节介绍数据在station 与 workbench 之间的同步机制。Niagara 内部的数据同步采用订阅的方式,包括长订阅和短订阅以及封装成事务的批量订阅。这样的机制保证了通讯带宽占用和数据实时性的平衡。这在 workbench 访问 station 时体现的尤为明显,workbench 只会用短订阅同步当前页面需要显示的数据,以节省带宽和处理数据的工作负荷。


2

公共服务(Service

它在 Niagara Station 中是一种重要的存在,它用来为站点中组件提供某些公共服务。像其他所有组件一样,Service 也是可以灵活部署的。Niagara 新建站点中默认添加了很多服务,如下图所示。


从代码的角度看,Service 其实就是 BComponent 的子类,它会在站点启动后自动加载,Service 的加载早于普通的 component。

3

任务,并发,异步和多线程Job,Concurrency,Async,Multi-thread

Control Engine 作为 Niagara 的主线程,负责处理定时,基础框架的一些异步action等关键任务,比如我之前详细介绍过的,Point 上的 set() 操作,就会在主线程中处理。


参考:

Niagara中的数据同步——你无意中点了set操作,接下来命运的齿轮开始转动……


Niagara中的数据同步—— set命运齿轮转动之开发者篇


因此,作为二次开发者,如果自定义了一些异步 action,尤其是耗时比较长的,就应该独立创建辅助线程来执行,而不要放在主线程中,避免影响主线程对核心任务的执行。


学习建议


本节的重点在于:一定要深刻理解并掌握辅助线程的使用。对于 component 开发来说,异步操作用辅助线程是至关重要的,否则很可能会把 Niagara 搞崩。因为主线程受到看门狗的监视,主线程的阻塞会导致 Niagara 重启。


开发者培训那些事儿(伍) —— 课程内容简介(上)

开发者培训那些事儿(肆) —— 学员能力要求分析(下)
开发者培训那些事儿(叁) —— 学员能力要求分析(上)


微信号:汇智众享
长按二维码
关注我们吧


【声明】内容源于网络
0
0
汇智众享
物联网平台建设、运维,物联网培训、教学
内容 70
粉丝 0
汇智众享 物联网平台建设、运维,物联网培训、教学
总阅读27
粉丝0
内容70