現在簡單粗暴口語化的方式來介紹一個需求:
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>