基于 JavaScript 语言的快速物联网开发架构

时间:2017-07-27 11:34

随 JavaScript 语言的流行,及物联网领域的崛起,我们能看到它们结合的可能性,同时也发现它特别适合于物联网开发。因此,在这篇文章里,笔者将主要从以下三个方面进行介绍:

典型的物联网架构,及多种语言带来的问题;

只使用 JavaScript 语言的物联网架构;

详解基于 JavaScript 语言的物联网不同层级结构。

那么,先让我们看看典型的物联网架构是怎样的吧。

典型的物联网架构

我们甚至还可以认为,物联网只是对互联网的扩展。与传统的 C/S 架构相比,它多了一个“数据采集层”,我们称之为传感器层、硬件层等。数据的产出不再只是用户,还来自于各式各样的联网设备。物联网不再局限于使用 HTTP 协议来传输数据,它还会使用 CoAP(受限制的应用协议)、MQTT(消息队列遥测传输)协议。

物联网的四个层级

当前的物联网应用,所要做的就是控制和数据处理。指令,由用户到终端一层一层往下下达,直到硬件端由设备去执行。而数据,便是一层一层往上上报,直至被可视化。

因此,与互联网的架构相比(如图 1、图 2 所示),起点与终点不一样了:指令的终点与数据的起点,变成了硬件层,而非最后的用户层。

基于 JavaScript 语言的快速物联网开发架构

图 1 互联网架构

基于 JavaScript 语言的快速物联网开发架构

图 2 典型的物联网架构

数据由客户端 A 发送到服务端,客户端 B 再从服务端获取 A 的数据,如此便算是完成了一个回路。而物联网架构则稍微麻烦了一些,多了一个层级,便多了一个步骤。
硬件层上的微控制器通过直连的方式,采集各式各样的数据,比如温度、湿度等。而受限于微控制器的成本、环境条件等因素,它可能无法直接连接到互联网。因此,需要连接到一些额外的联网设备才能实现。

而这些联网设备,会负责处理来自各个硬件设备的数据,并将其上传至服务器。同时,它会提供一个无线(如蓝牙、红外、ZigBee)接口作为数据的入口。因此,这一层级需要有更好的数据处理能力,并且它应该要可以快速开发。因为这些设备主要做的是协调工作,我们习惯于将其称为“协调层”。

使用多种语言的物联网

多年以前,笔者曾做过一个并不复杂的物联网系统:

使用 Python 里的 Django 作为 Web 服务框架,Django REST Framework 创建 RESTful API;

为了使用手机作为控制器,还用 Java 写一个 Android 应用;

使用 Raspberry Pi 作为硬件端的协调层,用于连接网络,并传输控制信号给硬件;

在硬件端使用 Arduino 作为控制器,写起代码特别简单;

还使用了 ZigBee 模块 XBee 及 I2C 作为连接不同 Arduino 模块的介质;

最后,还需在网页上做一个图表来显示实时数据。

为此,我们需要使用 Python、Java、JavaScript、C、Arduino 五种语言。而如果我们要写相应的 iOS 应用,还要用到 Objective-C。对于其他物联网项目来说,也多是如此,这简直是一场灾难。

在做这样的物联网项目之前,我们需要找到六个不同类型的工程师:一个硬件工程师设计电路图,一个懂硬件的嵌入式工程师,一个写服务端应用的工程师,一个写 Web 前端的工程师,以及对应的 Android 和 iOS 工程师。

且不考虑系统本身的协作,要找到这么多的工程师就不是一件容易的事。而如果我们可以只使用一种语言,将大大地改善开发效率、开发人员的难题。

JavaScript 语言下的物联网架构

JavaScript 语言在最近几年里特别流行,它流行起来有很多个原因,如:

使用 WebView 开发 UI 效率更高,也因此使得 WebView 随处可见;

基于事件驱动的编程模型;

JavaScript 容易上手(这是优点,也是缺点);

也因此,React、Unity 等框架提供了更多的可能性,可以让开发者用 JavaScript 开发游戏、VR 应用等等。

那么,只使用 JavaScript,我们可以设计出怎样的物联网系统呢?

基于纯 JavaScript 的物联网架构

如上所述,几年前要想寻找一门能完成一个包含客户端、服务端的系统的语言可谓相当地困难。而随着客户端(浏览器、移动设备)性能的提升、Node.js 的出现,这样的语言就浮现了出来,即 JavaScript。它不仅可以让我们只用一门语言来降低开发成本,还能实现快速地开发出这样的一个系统。那么,剩下的问题就是,在不同的层级,如何选用合适的框架来实现快速开发。

如图 3 所示,我们可以看到不同层级的可选用 JavaScript 方案。在此之中,有些纯粹只是为了证明 JavaScript 是可行的;有一些则可以在开发效率与运行速率上达到最好的平衡。选用这些方案,可以让我们实现更快速的 JavaScript 物联网应用开发。

基于 JavaScript 语言的快速物联网开发架构

图 3 基于纯 JavaScript 的物联网参考架构 服务层