Onvif协议学习:3、了解web services

Onvif协议学习:3、了解web services



转自:https://blog.csdn.net/benkaoya/article/details/72434574

ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供。要理解什么是ONVIF,就必须先知道什么是Web Services。所以,在专栏开始介绍ONVIF之前,我单独整理了一篇文章来介绍Web Services。

本文仅是简要的介绍了「什么是Web Services」,旨在让你对Web Services有个感性的认识。
所以本文只适合那些「没学过Web Services」的朋友,如果你已经懂得什么是Web Services,那么可以移步了。

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方法:

  • 1、首先A与B之间建立连接(通常是TCP,但还有其他的,如HTTP、管道等);
  • 2、然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;
  • 3、B接受A发送过来的字节流,然后反序列化得到方法名,方法参数,接着执行相应的方法调用并把结果30返回;
  • 4、A接受远程调用结果,输出30。

在这里插入图片描述

通过上面的简单阐述,远程调用与socket通讯好像啊,都是远程通讯,都是C/S模式。他两者到底有啥区别?

  • 1、RPC在提供强大的远程调用能力的同时,不损失本地调用的语义简洁性。RPC一个重要思想就是:使远程调用看起来像本地调用一样。

  • 2、socket是RPC经常采用的通信手段之一,除了Socket,RPC还有其他的通信方法,比如:http、操作系统自带的管道等。

用HTTP协议实现的远程调用,熟悉的人一下子就想到了Web Service。

3、Web Services的简单理解

我们可以这样来理解什么是Web Services,它即是一种网络服务。当你的系统完成一个通用的功能以后,如果你想让别人使用你的功能的话,那么你就可以发布成为Web Services服务,别人就可以通过网络远程调用到你的服务接口(即通过输入url可以访问,我们还可以像函数一样传递参数通过url传递)。

在这里插入图片描述

Web Services能够让各个系统之间的对接变得:快捷、方便、廉价。

4、Web Services举例

免费的Web Services服务:http://www.webxml.com.cn/zh_cn/index.aspx

这个网址提供了很多免费的Web Services服务,而且在网页上提供了各个远程调用接口的「测试」功能,这个「测试」功能有助于大家理解Web Services服务的远程调用接口,大家可以去体验下,我拿其中的「天气预报」和「手机号归属地查询」举个例子。

(1)、天气预报WEB服务

Web Services服务地址:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx

看主要接口getWeather,输入城市名称调用该接口,Web Services就会返回该城市的天气预报数据,如下图所示。

在这里插入图片描述

(2)、手机号归属地查询WEB服务

Web Services服务地址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx

看接口getMobileCodeInfo,输入手机号码,就能获得手机号码归属地省份、地区和手机卡类型信息。如下图所示:

在这里插入图片描述

5、Web Services常用的几种框架

实现Web Services的几种方式:

在这里插入图片描述

实现Web Services常用的框架有:REST、SOAP、JavaScript、XML-PRC等。这些看不懂,没关系,大家知道一个事情即可:实现Web Services的方式有好几种。

我们的主角ONVIF标准中的Web Service采用的是SOAP方式,接下来我们来了解下SOAP。

6、SOAP简介

(1)、 在TCP/IP四层模型中展示SOAP

SOAP(Simple Object Access Protoco,简单对象访问协议),是TCP/IP协议体系中的一个应用层协议,它是在HTTP基础之上实现的。

在这里插入图片描述

(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得到了广泛的应用。

套用一副对联加以概括:

上联: 社区活跃框架多
下联: 简单易懂不出错
横批: 省时省力

(3)、SOAP的局限性

SOAP也有一些局限性,以下场景就不适合 SOAP:

在这里插入图片描述

  • 实时数据推送
    HTTP是短连接的,都是客户端请求,服务端应答,这种模式导致服务端无法实时推送数据给客户端,只有像Socket那样的长连接才能保证实时通讯。

  • 省流量、高传输效率的应用
    HTTP有包头,而且XML全部用文本文件来传输数据,效率会比较低,如果你对流量、传输效率要求极高,那么你应该多考虑其它的方式,而不要用 SOAP。

(4)、SOAP协议看起来长这样

这个一个股票Web Services服务系统,其中GetStockPrice接口适用于查询股票当前价格,图中查询了IBM的股票价格,Web Services返回股票价格为34.5

在这里插入图片描述

(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语言,它看起来应该是这样子:

在这里插入图片描述

我们可以看看完整的WSDL文档长什么样子的:

如果你是第一次接触WSDL文档,前两个的WSDL文档估计你是看不懂(排版乱糟糟),而ONVIF的WSDL文档兴许你还能看懂(ONVIF官网的WSDL之所以这么工整,是因为插入排版的语句)。

7、总结

回顾下本文的重点:

Web Services是一种网络服务,它对外提供了一系列远程调用接口(RPC),你可以像本地调用一样去调用这些远程调用接口。列举了几个免费的WEB服务供大家体验。

Web Services常用的框架有多种,ONVIF标准中的Web Service采用的是SOAP方式。

WSDL文档是采用SOAP方式实现的Web Services的接口描述文档,就像动态库的.h文件一样。同时也展示了WSDL语言转化为C语言的对比效果。

看完这些,你或许有疑问,Web Services包含了SOAP、HTTP、XML,RPC、WSDL,辣么多东东,全部要自己码代码实现吗?当然不用,我们不必自己造轮子,有现成的工具会帮我们自动生产大部分的代码框架,如gSOAP工具。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值