pb9调用http发短信post_远程服务调用
遠程服務調用,是不是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請求有何區別?
遠程服務調用是基于本地服務器調用其他遠程目標服務(該服務可能是使用其他語言研發的接口)。那么既然有遠程服務調用,那么本地服務調用又是如何?
<?phpuse curlService;$curlService = new curlService();$orderInfo = curlService::payService->addOrder('張三', '移動電源', 3);//curlService的代碼<?phpclass 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來加深大家的理解
<?phpuse curlService;$curlService = new curlService();$orderInfo = curlService::payService->addOrder('張三', '移動電源', 3);//curlService的代碼<?phpclass 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則沒有鍵值名的概念,他的理論是減少傳輸過程中的消耗故使用序列化的排序來推測請求參數,故請求參數的順序很重要,這個概念跟本地服務調用也是一致的理解。
總結
以上是生活随笔為你收集整理的pb9调用http发短信post_远程服务调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kaggle账号_机器学习竞赛入门--k
- 下一篇: python多线程队列和池_Python