现在简单粗暴口语化的方式来介绍一个需求:
A 服务器上部署的项目中,有一个<code>UserService</code>里面有一个<code>getUserInfo</code>的方法。 B 服务器上想"直接"调用该方法,怎么办?
我们以 PHP 为例来进行分析。
我们希望在 B 服务器上实现类似于 A 服务器上直接调用方式
我们经常会使用 SDK 来调用第三方提供的 api 服务,我们的做法肯定类似于
sdk 里面的 <code>GetStudentInfoRequest</code> 通过<code>http</code>映射 A 服务器上的<code>UserService::getUserInfo</code>。
我们只需要在原来的基础上稍作修改即可,下面的代码仅做简单的演示
该服务部署在<code>localhost:8081</code>
这样是不是就非常方便的在客户端实现了像在本地一样调用远程的方法呢?这也是鸟哥 @Laruence yar 的操作原理。下面对比下 Yar 的 demo:
客户端代码,假设该服务设在局域网10.211.55.4上
服务器端代码
yar 背后的故事就是我前面那段 sdk 改造的代码演示。想必看到这里,rpc 框架不再那么神秘了吧。
当然这只是实现了 rpc 的一小部分,简单的远程调用。毕竟 php 是世界上最好的语言。
java 上面执行远程调用也类似。
如果换成 java 可稍微麻烦点,java 实现起来之后会让你觉得更加的本地化,所以 java 也是最强大的语言。
由于 java 是静态编译的,不存在类似于 php 里的__call方法的方式来实现远程调用,一般通过<code>动态代理</code>来实现
看完本篇,是不是顿时觉得 rpc 框架不再那么神秘,有一点点感觉了呢?
<a href="https://segmentfault.com/l/1500000011300619">https://segmentfault.com/l/1500000011300619</a>