物联网网络编程、Web编程综述

  本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述,网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真空领域。

  1.B/S是浏览器和客户端模式,使用HTML语法格式。其使用一问一答,即服务器是无状态的,它不知道客户端之前是否已经访问过。无状态有助于服务器高效率而且稳定地服务。但是这种模式对于物联网应用的影响是致命的。因为服务器无法主动地发送消息给物联设备。那么,如何改进呢?

  1)ajax技术。Ajax技术最新是为了解决页面局部刷新频繁的效率问题的。即一个HTML页面的局部数据发送变化了,在ajax之前需要重新发送一次请求,来刷新整个页面。而ajax则是仅仅向服务器请求发送变化的数据。前者在请求时会看到页面有闪烁,而后者则没有。我们正好可以利用ajax来定时向服务器发起请求,询问服务器是否有更新的数据。如果询问频率高,那么实时效果就好,但是会加重服务器负担。本质上,还是一问一答的形式,而不是双向通信。Ajax需要浏览器技术支持。

  2)websocket技术。Websocket是为了解决HTML的双向通信问题而提出的,其在第一条HTTP请求之后会让服务器将后续的协议更新到Websocket进行通信。Websocket需要tomcat7.0以上的运行容器技术支持。

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

  C/S客户端和服务器编程在智能机出现之前在PC桌面领域一度被认为会在逐渐被B/S所取代,但是在智能机设备端它又焕发新生。尽管HTML5发展迅速,但是个人觉得浏览器在手机等智能设备端的体验还是比不上原生APP。而HTML5更大的优势是其移植性很强。

  C/S编程可以直接使用socket通信进行通信,那自然不存在双方通信的问题。如果C/S编程使用http类库进行编程通信,它同样也会存在双向通信的问题。

  目前看来,很多人都希望沿用J2EE那套业务架构来支持物联网,但是物联设备毕竟是资源有限,有些终端可能是简单的单片机,其跑完整的TCP/UDP协议都比较困难,因此有人提出了精简版的TCP/IP协议,如CoAP(受限制的应用协议(ConstrainedApplicationProtocol)的代名词)、ucIP、LWIP等等。从业务应用协议来看,IBM研发的MQTT可能会成为物联网应用协议的标准。

  Web编程最先指的是浏览器展示内容的语法编程。Web静态语言即是HTML。

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

  需要知道,ASP,PHP,JSP这些语言是服务器编程语言,当用户通过浏览器访问服务器对应网页时,该网页的ASP/PHP/JSP等内容会经过服务器的解释引擎转化为具体的数据,最终和其他的HTML、CSS数据一起返回给浏览器进行展现。因此,浏览器得到的永远都是确定的HTML、CSS和数据,不存在ASP/PHP/JSP的语句。

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

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

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

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

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

您可能还会对下面的文章感兴趣: