远程服务调用

远程服务调用从上面的本地服务调用和远程服务调用,他们之间简单的区别仅仅是有无网络请求,但在使用上给开发者的感觉是一致的,我都是调用一个服务,服务的概念仅仅是

大家好,欢迎来到IT知识分享网。

远程服务调用

远程服务调用,是不是API的另一个说法?

远程调用(RPC,Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

RPC其实仅仅是一种技术思维方式,而非一种实际的网络协议,所以在实现RPC常见基于HTTP、TCP、UDP这三种网络协议进行封装。虽然说RPC是远程服务调用,但HTTP、TCP、UDP都是远程调用其他服务器里面的服务,那是不是这3种网络协议的统称就是RPC?

带着这个疑问,我们先去了解下RPC的实现原理的如何的。

远程服务调用

RPC的数据流向(从左到右)

1)序列化:发送方将传输的内容进行序列化排序,方便接收方接收到后按此顺序进行获取使用(反序列化来解密传输内容)

2)协议编码:将RPC的传输协议既定为http、tcp或udp的其中一种

3)网络传输:通过网络将数据信息传输到目标机器,从目标机器返回得到结果

从上面的实现原理,给人的感觉除了需要序列化外,其他跟普通的网络协议没什么区别,那RPC跟普通的http请求有何区别?

远程服务调用是基于本地服务器调用其他远程目标服务(该服务可能是使用其他语言研发的接口)。那么既然有远程服务调用,那么本地服务调用又是如何?

<?php use curlService; $curlService = new curlService(); $orderInfo = curlService::payService->addOrder('张三', '移动电源', 3); //curlService的代码 <?php class curlService{ public function __call($method, $params) { $url = '';//远程服务的接口 $postData['class'] = $this->class; $postData['method'] = $method; $postData['params'] = $params; $this->response = HttpRequest::post($url, $postData); } } // 远程服务的接受者 <?php $class = $_POST['class']; $method = $_POST['method']; $param = $_POST['param']; call_user_func_array(array($class, $method), $params);//通过反射机制将调用转发到对应的方法上,这个时候参数的顺序就变成异常重要了。

本地服务调用,意味着我们所调用addOrder这个本地类文件的方法,则需要传输$userName,$goods,$num这3个参数,而且这3个参数的顺序还不能捣乱,不然会导致逻辑出错或代码类型不一致直接爆出500。

大致上本地服务调用大家应该也有概念了,那我们直接写一个简单的远程服务调用的Demo来加深大家的理解

<?php use curlService; $curlService = new curlService(); $orderInfo = curlService::payService->addOrder('张三', '移动电源', 3); //curlService的代码 <?php class curlService{ public function __call($method, $params) { $url = '';//远程服务的接口 $postData['class'] = $this->class; $postData['method'] = $method; $postData['params'] = $params; $this->response = HttpRequest::post($url, $postData); } } // 远程服务的接受者 <?php $class = $_POST['class']; $method = $_POST['method']; $param = $_POST['param']; call_user_func_array(array($class, $method), $params);//通过反射机制将调用转发到对应的方法上,这个时候参数的顺序就变成异常重要了。

从上面的本地服务调用和远程服务调用,他们之间简单的区别仅仅是有无网络请求,但在使用上给开发者的感觉是一致的,我都是调用一个服务,服务的概念仅仅是做一个事情,而不是调用一个接口。

如果非要将RPC和网络协议Http进行对比,实际上Http并不关心你请求的参数顺序而是关心请求参数对应的键值名,通过键值名来获取请求数据。而RPC则没有键值名的概念,他的理论是减少传输过程中的消耗故使用序列化的排序来推测请求参数,故请求参数的顺序很重要,这个概念跟本地服务调用也是一致的理解。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/72101.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信