ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services

1. 专栏导读

本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文章讲过的知识点(或代码段),后面文章不会赘述。为了节省篇幅,突出重点,在文章中展示的示例代码仅仅是关键代码,你可以在「专栏开篇」中获取完整代码。

如有错误,欢迎你的留言纠正!让我们共同成长!你的「点赞」「打赏」是对我最大的支持和鼓励!

2. 适合读者

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

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


图1

Web Services初学者,往往会被诸如WSDL、SOAP、HTTP、XML等概念搞得晕头转向。往往也会发出这样的疑问:要胜任ONVIF协议网络摄像机(IPC)客户端程序开发,对Web Services的掌握要到什么程度?我现在就消除你的疑惑,你只要知道皮毛就够了,这得益于诸如gSOAP这样现成的工具,避免了我们「自己造轮子」。跟着我的专栏一步步学习,你就会体会到这点。

不多说,进入本文的主题。

3. 远程调用

函数接口调用方式分为:

  • 本地调用(Local Procedure Call,简称LPC)。
  • 远程调用(Remote Procedure Call,简称RPC)。


图2

  • 本地调用:通常,在我们的代码中调用一个函数,这个函数要么是系统API,要么是我们自己实现的本地代码,一起编译,一起发布,也在同一个进程中一起执行,这就是本地调用!

  • 远程调用:被调用方法的具体实现不在同一个进程,而是在别进程,甚至别的电脑上。RPC一个重要思想就是,使远程调用看起来像本地调用一样,调用者无需知道被调用接口具体在哪台机器上执行。

4. 远程调用原理

比如 A (client) 调用 B (server) 提供的remoteAdd方法:

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


图3

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

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

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

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

5. Web Services的简单理解


图4

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

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

6. Web Services举例

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

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

6.1. 天气预报WEB服务

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

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


图5

天气预报WEB服务

6.2. 手机号归属地查询WEB服务

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

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


图6

手机号归属地查询WEB服务

7. Web Services常用的几种框架


图7

实现Web Services的几种方式

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

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

8. SOAP简介

8.1. 在TCP/IP四层模型中展示SOAP

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


图8

8.2. 如此理解SOAP

浅谈 SOAP:http://www.ibm.com/developerworks/cn/xml/x-sisoap/

这篇IBM的文章「浅谈 SOAP」写的很好,值得参考。

以下这张图是我对SOAP的理解:


图9

SOAP协议 = RPC机制 + HTTP传输协议 + XML数据格式

SOAP的两个主要设计目标是「简单性」和「可扩展性」,SOAP的设计正是围绕这两点展开的。

SOAP使用RPC机制,体现了「简单性」。让客户端调用Web Service的接口看起来像本地调用一样,确实很简单。

SOAP 使用 HTTP 传送 XML,体现了「可扩展性」。尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 成熟、稳定、又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。

套用一副对联加以概括:

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

8.3. SOAP的局限性

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


图10

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

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

8.4. SOAP协议看起来长这样


图11

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

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文档。


图12

什么是WSDL

如果将WSDL语言转化成C语言,它看起来应该是这样子:


图13

WSDL语言转化成C语言

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

  1. 天气预报WEB服务的接口说明(WSDL文档)

  2. 手机号归属地查询WEB服务的接口说明(WSDL文档)

  3. ONVIF标准的WEB服务的接口说明(WSDL文档)

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

9. 总结

回顾下本文的重点:

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

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

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

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

  • 91
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
ONVIF协议是一种开放的网络视频接口标准,旨在实现网络摄像机网络视频录像机和其他相关设备的互通互联。在开发ONVIF协议网络摄像机客户端程序时,我们需要遵循以下步骤: 首先,为了开发ONVIF协议网络摄像机客户端程序,我们需要对ONVIF协议进行深入了解。ONVIF协议定义了网络摄像机和客户端之间的通信规则和接口,包括设备发现、视频流传输、设备控制等。我们需要熟悉协议的各个方面,包括消息结构、命令和响应等。 其次,我们需要选择合适的开发平台和工具。ONVIF协议可以在不同平台上运行,如Windows、Linux等。我们可以选择适合我们的开发环境的编程语言和工具,并研究它们的ONVIF协议支持。 接下来,我们需要编写客户端程序的代码。首先,我们需要实现设备发现功能,通过发送协议指定的消息,搜索网络中的ONVIF设备。一旦找到设备,我们就可以获取设备的信息,如设备地址、设备型号等。然后,我们可以向设备发送命令,如实时视频流请求、设备时间同步等。我们需要处理设备返回的响应消息,并根据协议规范处理各种结果。 最后,我们需要对开发客户端程序进行测试和调试。我们可以创建模拟的ONVIF设备,模拟设备的各种行为,并验证客户端程序的功能和性能。我们还可以使用一些专业的测试工具来检查客户端程序的兼容性和稳定性。 总而言之,在开发ONVIF协议网络摄像机客户端程序时,我们需要深入了解ONVIF协议,选择适合的开发平台和工具,编写代码实现协议的各种功能,并进行测试和调试。这个过程中需要耐心和细心,以确保开发出高质量的客户端程序

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值