理解什么是web Service
Web Services初学者,往往会被诸如WSDL、SOAP、HTTP、XML等概念搞得晕头转向。往往也会发出这样的疑问:要胜任ONVIF协议网络摄像机(IPC)客户端程序开发,对Web Services的掌握要到什么程度?我现在就消除你的疑惑,你只要知道皮毛就够了,这得益于诸如gSOAP这样现成的工具,避免了我们「自己造轮子」。跟着我的专栏一步步学习,你就会体会到这点。
1. 远程调用
函数接口调用方式分为:
本地调用(Local Procedure Call,简称LPC)。
远程调用(Remote Procedure Call,简称RPC)。
本地调用:通常,在我们的代码中调用一个函数,这个函数要么是系统API,要么是我们自己实现的本地代码,一起编译,一起发布,也在同一个进程中一起执行,这就是本地调用!
远程调用:被调用方法的具体实现不在同一个进程,而是在别进程,甚至别的电脑上。RPC一个重要思想就是,使远程调用看起来像本地调用一样,调用者无需知道被调用接口具体在哪台机器上执行。
2. 远程调用原理
比如 A (client) 调用 B (server) 提供的remoteAdd方法
首先A与B之间建立连接(通常是TCP,但还有其他的,如HTTP、管道等);
然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;
B接受A发送过来的字节流,然后反序列化得到方法名,方法参数,接着执行相应的方法调用并把结果30返回;
A接受远程调用结果,输出30。
通过上面的简单阐述,远程调用与socket通讯好像啊,都是远程通讯,都是C/S模式。他两者到底有啥区别?
RPC在提供强大的远程调用能力的同时,不损失本地调用的语义简洁性。RPC一个重要思想就是:使远程调用看起来像本地调用一样。
socket是RPC经常采用的通信手段之一,除了Socket,RPC还有其他的通信方法,比如:http、操作系统自带的管道等。
用HTTP协议实现的远程调用,熟悉的人一下子就想到了Web Service。
3. Web Services的简单理解
我们可以这样来理解什么是Web Services,它即是一种网络服务。当你的系统完成一个通用的功能以后,如果你想让别人使用你的功能的话,那么你就可以发布成为Web Services服务,别人就可以通过网络远程调用到你的服务接口。
Web Services能够让各个系统之间的对接变得:快捷、方便、廉价。
4. Web Services常用的几种框架
实现Web Services的几种方式
实现Web Services常用的框架有:REST、SOAP、JavaScript、XML-PRC等。这些看不懂,没关系,大家知道一个事情即可:实现Web Services的方式有好几种,
我们的主角ONVIF标准中的Web Service采用的是SOAP方式,接下来我们来了解下SOAP。
5. SOAP简介
5.1. 在TCP/IP四层模型中展示SOAP
SOAP(Simple Object Access Protoco,简单对象访问协议),是TCP/IP协议体系中的一个应用层协议,它是在HTTP基础之上实现的。
5.2. 如此理解SOAP
浅谈 SOAP:http://www.ibm.com/developerworks/cn/xml/x-sisoap/
这篇IBM的文章「浅谈 SOAP」写的很好,值得参考。
以下这张图是我对SOAP的理解:
SOAP协议 = RPC机制 + HTTP传输协议 + XML数据格式
SOAP的两个主要设计目标是「简单性」和「可扩展性」,SOAP的设计正是围绕这两点展开的。
SOAP使用RPC机制,体现了「简单性」。让客户端调用Web Service的接口看起来像本地调用一样,确实很简单。
SOAP 使用 HTTP 传送 XML,体现了「可扩展性」。尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 成熟、稳定、又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。
5.3. SOAP的局限性
SOAP也有一些局限性,以下场景就不适合 SOAP:
实时数据推送
HTTP是短连接的,都是客户端请求,服务端应答,这种模式导致服务端无法实时推送数据给客户端,只有像Socket那样的长连接才能保证实时通讯。
省流量、高传输效率的应用
HTTP有包头,而且XML全部用文本文件来传输数据,效率会比较低,如果你对流量、传输效率要求极高,那么你应该多考虑其它的方式,而不要用 SOAP。
5.4. SOAP协议看起来长这样
8.5. WSDL文档
对于一个Web Services,我们如何知道它对外提供了多少个接口,以及每个接口是如何调用的,这就涉及到WSDL(Web Services Description Language,网络服务描述语言)。
注意:只有SOAP方式实现的Web Services才有WSDL文档,其他方式实现的Web Services并没有WSDL文档。
我们可以这么理解WSDL:WSDL是一个使用XML语言书写的文档,这个文档描述了Web Services对外提供了哪些接口,就像动态库的.h文件一样。每个Web Services都有对应的WSDL文档。
什么是WSDL
如果将WSDL语言转化成C语言,它看起来应该是这样子:
9. 总结
回顾下本文的重点:
Web Services是一种网络服务,它对外提供了一系列远程调用接口(RPC),你可以像本地调用一样去调用这些远程调用接口。
Web Services常用的框架有多种,ONVIF标准中的Web Service采用的是SOAP方式。
WSDL文档是采用SOAP方式实现的Web Services的接口描述文档,就像动态库的.h文件一样。同时也展示了WSDL语言转化为C语言的对比效果。
看完这些,你或许有疑问,Web Services包含了SOAP、HTTP、XML,RPC、WSDL,辣么多东东,全部要自己码代码实现吗?当然不用,我们不必自己造轮子,有现成的工具会帮我们自动生产大部分的代码框架,如gSOAP工具。