物联网中应用最广泛的就是request/response通信模式(MQTT采用pub/sub模式)。通信双方一request一response,实际上就是client、server的模式。物联网中host端去request end-device的tempreture,end-device受到request后,responce相应的tempreture。实际上,end-device在此交互中充当着server的角色,为host端提供温度值。
end-device是server?我们想象中的server都是高性能的,每秒钟响应巨量的request,而资源受限的end-device怎么可以是server?但它确实提供了响应request tempreture的服务。
随着移动互联网的发展,client端不仅仅局限于PC,更多地,手机,pad等移动终端设备也应实现对服务器端end-device的访问。因此,end-device需要为不同的开发平台(Java、.net)和操作系统(Linux、Windows)提供服务。那么,有没有什么技术可以实现这种跨越平台,语言,从而达到与end-device(服务器)通信的目的?现在传统意义的服务器端是如何实现这一功能的呢,Web service!
一、什么是Web Service?
形象一点理解的话,Web Service就是一组位于远程服务器上的函数库(或者是存在于网络上的应用程序组件),通过这些函数库(组件),客户端可以通过web访问这些服务器端的service。调用Web service的这一端叫做客户端,而提供Web service的一端叫做服务端。
套用网上一个经典例子:腾讯QQ客户端的天气服务,显然不是腾讯公司发射卫星,自己去维护公司的内部天气服务器,而是去request气象局的服务器(气象局将天气信息通过Web service方式进行公开),再将服务器response回的天气状况进行QQ显示。
Web service的平台技术
从深层次讲,Web Service是一套标准、规范,这套规范了:
如何将server端的信息公布出去,让客户端得到足够信息来调用Web service;
因为需要跨平台,跨操作系统,所以需要提供一种标准的类型对信息进行封装。
规范一种方法,对Web service进行远程访问;
WSDL+XML+HTTP就构成了Web service的三大技术。
WSDL(Web Services Description Language):是一种基于xml的语言,是机器可读的。客户端在访问服务器提供的服务的时候,首先要知道,服务器提供的resources的url地址在哪,有哪些服务方法可以调用。WSDL文件就是服务器告诉客户端们我提供了哪些服务方法,他们的调用的url在哪。WSDL保存在Web服务器端,通过固定的url就可以访问到它。
XML格式:采用XML格式进行消息描述,其优点在于平台无关,它解决了数据的表示问题。
HTTP协议:Web Service通过HTTP协议发送请求和接收响应。request和response的内容均采用XML格式进行封装,并且在HTTP协议中加上一些首部字段如Content-type用于描述HTTP报文的内容格式。
二、Webservice 在IoT中的问题
上文提过,物联网中的end-device在交互中充当着server的角色。那么,上述的WSDL+XML+HTTP能否直接套用到end-device中呢?主要有下面几点问题:
XML文件难以解析,end-device在对文件进行解析时,会消耗过多的CPU和内存资源,XML文件相对来时比较大,在传输过程中会消耗较多的网络资源。
HTTP封包也比较大,消耗过多网络资源、内存资源。
HTTP的传输层使用的是TCP协议,在握手挥手过程中,过多的冗余数据Segment。
所以,WSDL+XML+HTTP+TCP是PC级别的,要部署在ROM RAM小到只有几十KB的end-device端中不是很实际,而且还要加上TCP/IP,链路层,外设代码,更显得不堪重负。
因此Web service要应用在物联网中,部署在end-device上必须要需求新的替代品。这就引出了我们的主角——CoAP协议。
三、IoT中的Web Service
上文提到PC级别的Web Service采用XML+HTTP+TCP的模式,IoT中end-device也采用类似架构的模式,只不过更精简,更易解析,更省资源:JSON+CoAP+UDP。