1.专栏导读
本专栏第一篇文章「开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文章讲过的知识点(或代码段),后面文章不会赘述。为了节省篇幅,突出重点,在文章中展示的示例代码仅仅是关键代码,你可以在「开篇」中获取完整代码。
如有错误,欢迎你的留言纠正!让我们共同成长!你的「点赞」或「打赏」是对我最大的支持和鼓励!
2.适合读者
ONVIF规范中设备管理和控制部分所定义的接口均以WebServices的形式提供。要理解什么是ONVIF,就必须先知道什么是WebServices。所以,在专栏开始介绍ONVIF之前,我单独整理了一篇文章来介绍WebServices。
本文仅是简要的介绍了「什么是WebServices」,旨在让你对WebServices有个感性的认识。
所以本文只适合那些「没学过WebServices」的朋友,如果你已经懂得什么是WebServices,那么可以移步了
WebServices初学者,往往会被诸如WSDL、SOAP、HTTP、XML等概念搞得晕头转向。往往也会发出这样的疑问:要胜任ONVIF协议网络摄像机(IPC)客户端程序开发,对WebServices的掌握要到什么程度?我现在就消除你的疑惑,你只要知道皮毛就够了,这得益于诸如gSOAP这样现成的工具,避免了我们「自己造轮子」。跟着我的专栏一步步学习,你就会体会到这点。
3.远程调用函数接口调用方式分为:
本地调用(LocalProcedureCall,简称LPC)。
远程调用(RemoteProcedureCall,简称RPC)。
●本地调用:通常,在我们的代码中调用一个函数,这个函数要么是系统API,要么是我们自己实现的本地代码,一起编译,一起发布,也在同一个进程中一起执行,这就是本地调用!
●远程调用:被调用方法的具体实现不在同一个进程,而是在别进程,甚至别的电脑上。RPC一个重要思想就是,使远程调用看起来像本地调用一样,调用者无需知道被调用接口具体在哪台机器上执行。
4.远程调用原理
比如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还有其他的通信方法,比如: