物联网网络编程和web编程

本文是基于嵌入式物联网研发project师的视觉对网络编程和web编程进行阐述。javascript

对于专一J2EE后端服务开发的同窗来讲,这篇文章可能略微简单。但是网络编程和web编程对于绝大部分嵌入式物联网project师来讲是一块真空邻域。前端

的确。物联网研发应该以团队协做分工的方式进行,因此有嵌入式设备端、网关、web前端、APP、后端开发等专属岗位。做为系统架构师。天然需要掌握各类岗位的关键技术。java

做为嵌入式project师。掌握网络编程、web编程。能极大地扩展本身的视野和构架思惟,能够主动地对系统的各类协议和应用场景提出优化的看法,而不不过接受任务摊派,至少,能够在不需要依赖后端project师的状况。能够高速搭建一个物联网demo系统。mysql

所以。掌握一些主要的网络编程、web编程技能,对于提高物联网研发project师的开发能力是很重要的。web


1、OSI七层模型和TCP/IP四层模型ajax

OSI七层模型是网络协议的理论研究模型,或者可以称之为理想的模型,而TCP/IP四层模型才是事实标准,是已经被普遍使用的模型。二者之间的关联图例如如下:sql



衡量一个物联网平台或者协议是否有用的关键技术的因素是它提供的消息触达能力,直接影响物联网应用开发。数据库

因此,咱们从消息触达能力去分析TCP/IP这个事实标准模型。咱们设想下面场景,并分析。apache

         


1.网络接口层。路由器1和wifi音箱、空调、热水器组成一个家庭局域网,其使用wifi(802.11)协议进行通讯。该协议定义了物理信号、数据帧格式、丢包重发机制、流量控制等等。编程

这些都是网络接口层的任务。还有。多个设备共享信道,同一时候发数据会产生冲突。它是怎么解决的。这也是网络接口层的内容。事实上,物联网project师没必要在乎这些内容。因为wifi物理信号方面的内容是由wifi芯片厂商负责,而wifi单芯片(wifi+SOC)则会提供SDK包并提供SOCKET编程接口了。因此,咱们职责的重点是关注网络层以上的编程开发知识。

2.网络层。即IP协议。最基础的认识是每个IP相应一个物联设备、手机或者一个后方server。

原则上一个网卡相应一个IP,如图中wifi音箱、wifi热水器均有一个独立的IP。网络之间的通讯都是基于IP进行的,网络包会经过路由器终于送到目标IP所相应的设备上。

Wifi音箱等家庭设备增长家庭局域网。事实上是各得到一个局域网IP。192.168.*.*,包含路由器1也有一个局域网地址。但是路由器1另外一个互联网IP。仅仅有路由器的互联网IP才干被外界所获知。外界是不能主动获知局域网IP详细相应哪一个设备的。仅仅有路由器1才知道,所以所有对外发送的数据包的源IP都是路由器1的互联网IP,外界发送给设备的数据包的目标IP也是路由器的互联网IP。

咱们都知道,设备上线时需要向物联平台server告知本身的状态,以便于用户控制。

所以物联平台server的IP必须是一个互联网IP。或者是一个域名(DNS协议可以将域名解析为IP)。假设它是一个局域网IP。那设备是不可能訪问到的。

这里,咱们还必须要记住一点,设备和物联平台的第一次通讯永远都应该设备主动发出。因为就算物联平台知道路由器1的公网IP,它也没法将消息传送到内部的设备的。另外,server必须要持续设备到达物联平台最后一跳的路由信息,因为路由信息原路返回的过程当中具备路由器1记录是哪一个设备发出的信息。假设不记录这个信息,物联平台单靠路由器1的互联网IP是没法触达到详细设备的。

假设你不能理解上面这一段话,就记住,物联平台经过路由器1的互联网IP主动发一条消息到设备是不能成功的,但是。当设备发一条消息给物联平台后。物联平台直接响应该数据包(IP源地址和目标地址调换位置)是可以触达设备的。假设是知足一问一答的方式,那么server不需要记录这个路由信息,假设需要知足server主动发消息给设备的场景。那么server是需要记录这个信息的。

另外。咱们知道。网络设备在物理上表现为一个真实的网卡。网卡的MAC地址是6个字节。48位。在一个局域网内通讯,网络编程时都是基于IP地址的,路由器或者交换机怎样经过IP地址找到相应的MAC地址。即为ARP地址解析协议。这个也是网络层的职责,但是做为开发者来讲。咱们了解就能够。

3. 传输层。即TCP/UDP协议。

对于传输层,咱们需要理解的是。一台PC或者手机上执行的网络运用可能很是多,但是他们都相应相同一个IP。操做系统怎样将一个数据包分发给相应的网络运用呢?这就依靠传输层所定义的port来区分。常见的网络应用层协议都会默认传输层port号,如FTP相应21,HTTP相应80。SMTP相应25等等。传输层除了定义port号以外,还有两个很是重要的协议,即TCP面向链接的协议和UDP数据包协议。前者可以理解为一个虚拟的电话链接协议,一旦两方打电话创建起链接后两方通话的过程当中,所有的数据包均是走相同的路由路径。

因为面向链接的协议会在带宽中预留资源来保障。因此面向链接协议可以保证质量,所以适用于一些对数据质量要求严格的网络运用中,如电子邮件应用,假设不保证质量,邮件内容都不保证正确,谁会使用这个邮件系统呢?但是,对于一些音频视频类运用,丢一两帧全然不影响用户体验,则会使用UDP协议,其不是面向链接。发完后以前的路由信息可以不在保存,其是使用最大努力交付(即trymy best)。

4. 应用层。常见的网络应用协议包含HTTP、FTP、SMTP、POP等等。

嵌入式物联应用是创建在这些网络应用协议的基础之上的。

这些协议会规范主要的请求链接、响应和传输数据等方面的格式。做为嵌入式物联网应用来讲,其应该自行定义应用协议的格式,这些数据格式可以简单本身定义,也可以使用成熟的标准格式,如HTML、XML、JSON等等。由于防火墙通常仅仅放开port为80的HTTP数据包,因此物联网应用通常都会构建在HTTP的基础上。

因此,咱们要区分网络应用层协议HTTP和应用本身定义协议。后者使用前者进行传输通讯。不管应用本身定义协议使用哪种格式。都需要通讯两方同一时候使用。

物联设备和物联平台后台通讯时,可以使用简单的XML格式或者JSON格式。而物联平台还要被PC浏览器訪问,那么。由于浏览器仅仅支持HTML格式。则要求物联平台后台提供HTML格式的内容服务,同理,物联网平台和手机APP之间的通讯可以用XML或者JSON。

甚至,咱们可以本身定义简单的命令来实现功能。但是使用XML或者JSON这些格式有助于数据有良好的可读性,而且也有成熟的类库来解释。

这些都是创建在HTTP网络应用协议的基础上的。


2、socket编程

socket编程分为TCP和UDP两种方式。分别例如如下:


可见,TCP/UDP的socket套接字在通讯以前需要绑定(bind)IP和port地址。对于TCP来讲,server需要先侦听listen,而client发起connect请求后,server才干accept,以后即创建面向链接的通讯环境。经过send/recv函数进行通讯。

而UDP编程则很是easy,绑定以后可以立刻開始传输数据。

除了掌握主要的socket编程以外,还需要清楚下面知识:

1)堵塞和非堵塞。网络套接字有堵塞和非堵塞之分。如若是建立的socket是堵塞的,那么其recv函数就必定要等到对方传送数据过来,才会返回,不然会一直处于堵塞状态。而非堵塞状态则是立刻看看缓冲有没有数据,若是有就返回数据,没有会返回错误,而不是一直死等。堵塞模式可以简单地理解为同步工做模式,而非堵塞模式可以理解为异步工做模式。

2)多路复用。做为server,可能会存在多个client链接。假设轮询每个clientsocket有没有数据,那效率多累啊。

Socket编程的select和poll接口用来解决这类多路IO复用的问题,它能够同一时候侦測多个链接的数据通讯。


3、B/S和C/S

1.B/S是浏览器和client模式,使用HTML语法格式。其使用一问一答,即server是无状态的,它不知道client以前是否已经訪问过。无状态有助于server高效率而且稳定地服务。但是这样的模式对于物联网应用的影响是致命的。因为server没法主动地发送消息给物联设备。

那么,怎样改进呢?

1)ajax技术。Ajax技术最新是为了解决页面局部刷新频繁的效率问题的。

即一个HTML页面的局部数据发送变化了。在ajax以前需要又一次发送一次请求,来刷新整个页面。而ajax则是只向server请求发送变化的数据。前者在请求时会看到页面有闪烁,然后者则没有。咱们正好可以利用ajax来定时向server发起请求,询问server是否有更新的数据。假设询问频率高。那么实时效果就好,但是会加剧server负担。本质上,仍是一问一答的形式,而不是双向通讯。Ajax需要浏览器技术支持。

2)websocket技术。Websocket是为了解决HTML的双向通讯问题而提出的,其在第一条HTTP请求以后会让server将兴许的协议更新到Websocket进行通讯。

Websocket需要tomcat7.0以上的执行容器技术支持。

物联网应用开发在设备端可以经过socket编程来模拟HTTP协议,相同可以模拟HTTP之上的HTML、XML或者Websocket。

2. C/S

C/Sclient和server编程在智能机出现以前在PC桌面领域一度被以为会在逐渐被B/S所代替。但是在智能机设备端它又焕发新生。虽然HTML5发展迅速。但是我的以为浏览器在手机等智能设备端的体验仍是比不上原生APP。而HTML5更大的优点是其移植性很是强。

C/S编程可以直接使用socket通讯进行通讯,那天然不存在两方通讯的问题。假设C/S编程使用http类库进行编程通讯。它相同也会存在双向通讯的问题。

眼下看来,很是多人都但愿沿用J2EE那套业务架构来支持物联网,但是物联设备毕竟是资源有限,有些终端多是简单的单片机,其跑完整的TCP/UDP协议都比較困难,所以有人提出了精简版的TCP/IP协议。如CoAP(受限制的应用协议(ConstrainedApplicationProtocol)的代名词)、ucIP、LWIP等等。

从业务应用协议来看,IBM研发的MQTT可能会成为物联网应用协议的标准。


4、 Web编程

Web编程最早指的是浏览器展现内容的语法编程。Web静态语言便是HTML。

1.HTML不支持数据的动态变化。所以产生了基于解释引擎的动态语言,如ASP、PHP、JSP等等。这类语言会使用HTML/CSS来描写叙述展示样式,而使用动态语言来控制数据的展示,好比訪问数据库获取新数据等等。

需要知道,ASP,PHP。JSP这些语言是server编程语言,当用户经过浏览器訪问server相应网页时,该网页的ASP/PHP/JSP等内容会通过server的解释引擎转化为详细的数据,终于和其它的HTML、CSS数据一块儿返回给浏览器进行展示。所以。浏览器获得的永远都是肯定的HTML、CSS和数据,不存在ASP/PHP/JSP的语句。

2.javascript脚本。

脚本是浏览器技术支持的语法。而不是server技术支持的。好比一个登陆界面。要确保用户输入的正确性,如不规则字符,长度太长等等,一般会使用javascript脚本进行检測,而不需要发送请求给server。上述讲到的ajax技术也是浏览器支持的脚本技术。

3.jQuery。它是对javascript技术的封装,能够更好地进行前端编程控制。

4.HTML/CSS/JS脚本,称为web前端编程开发,而ASP/JSP/PHP等为后端开发。

5.后端开发天然会涉及到数据库訪问、业务逻辑。并且其需要和前端进行交互。所以,web应用编程架构广泛使用MVC编程模型,即M为数据模型,负责数据库訪问;V为视图,负责展示;C为控制。MVC模型能够对展示和数据库进行良好的分离。有助于应用开发。

6.做为整体执行架构来理解,server需要包含数据库(如mysql)、web应用和解释引擎和web服务(如apache和tomcat)。Apache提供http服务。

7.JSP的基础是JAVA语法,J2EE架构提供servlet技术,用于支持网络运用。JSP事实上是对servlet的高级封装并做为独立的技术出现的,JSP側重支持B/S方面的网络运用。而servlet则经过映射类的方式支持C/S方式的网络运用,如微信蓝牙接入和wifi接入的后端技术即便用servlet进行支持, 顶层使用XML/JSON格式。

相关文章
相关标签/搜索