pb9调用http发短信post_远程服务调用
遠(yuǎn)程服務(wù)調(diào)用,是不是API的另一個說法?
遠(yuǎn)程調(diào)用(RPC,Remote Procedure Call):遠(yuǎn)程過程調(diào)用,它是一種通過網(wǎng)絡(luò)從遠(yuǎn)程計算機(jī)程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的思想。
RPC其實僅僅是一種技術(shù)思維方式,而非一種實際的網(wǎng)絡(luò)協(xié)議,所以在實現(xiàn)RPC常見基于HTTP、TCP、UDP這三種網(wǎng)絡(luò)協(xié)議進(jìn)行封裝。雖然說RPC是遠(yuǎn)程服務(wù)調(diào)用,但HTTP、TCP、UDP都是遠(yuǎn)程調(diào)用其他服務(wù)器里面的服務(wù),那是不是這3種網(wǎng)絡(luò)協(xié)議的統(tǒng)稱就是RPC?
帶著這個疑問,我們先去了解下RPC的實現(xiàn)原理的如何的。
RPC的數(shù)據(jù)流向(從左到右)
1)序列化:發(fā)送方將傳輸?shù)膬?nèi)容進(jìn)行序列化排序,方便接收方接收到后按此順序進(jìn)行獲取使用(反序列化來解密傳輸內(nèi)容)
2)協(xié)議編碼:將RPC的傳輸協(xié)議既定為http、tcp或udp的其中一種
3)網(wǎng)絡(luò)傳輸:通過網(wǎng)絡(luò)將數(shù)據(jù)信息傳輸?shù)侥繕?biāo)機(jī)器,從目標(biāo)機(jī)器返回得到結(jié)果
從上面的實現(xiàn)原理,給人的感覺除了需要序列化外,其他跟普通的網(wǎng)絡(luò)協(xié)議沒什么區(qū)別,那RPC跟普通的http請求有何區(qū)別?
遠(yuǎn)程服務(wù)調(diào)用是基于本地服務(wù)器調(diào)用其他遠(yuǎn)程目標(biāo)服務(wù)(該服務(wù)可能是使用其他語言研發(fā)的接口)。那么既然有遠(yuǎn)程服務(wù)調(diào)用,那么本地服務(wù)調(diào)用又是如何?
<?phpuse curlService;$curlService = new curlService();$orderInfo = curlService::payService->addOrder('張三', '移動電源', 3);//curlService的代碼<?phpclass curlService{ public function __call($method, $params) { $url = '';//遠(yuǎn)程服務(wù)的接口 $postData['class'] = $this->class; $postData['method'] = $method; $postData['params'] = $params; $this->response = HttpRequest::post($url, $postData); } }// 遠(yuǎn)程服務(wù)的接受者<?php $class = $_POST['class'];$method = $_POST['method'];$param = $_POST['param'];call_user_func_array(array($class, $method), $params);//通過反射機(jī)制將調(diào)用轉(zhuǎn)發(fā)到對應(yīng)的方法上,這個時候參數(shù)的順序就變成異常重要了。本地服務(wù)調(diào)用,意味著我們所調(diào)用addOrder這個本地類文件的方法,則需要傳輸$userName,$goods,$num這3個參數(shù),而且這3個參數(shù)的順序還不能搗亂,不然會導(dǎo)致邏輯出錯或代碼類型不一致直接爆出500。
大致上本地服務(wù)調(diào)用大家應(yīng)該也有概念了,那我們直接寫一個簡單的遠(yuǎn)程服務(wù)調(diào)用的Demo來加深大家的理解
<?phpuse curlService;$curlService = new curlService();$orderInfo = curlService::payService->addOrder('張三', '移動電源', 3);//curlService的代碼<?phpclass curlService{ public function __call($method, $params) { $url = '';//遠(yuǎn)程服務(wù)的接口 $postData['class'] = $this->class; $postData['method'] = $method; $postData['params'] = $params; $this->response = HttpRequest::post($url, $postData); } }// 遠(yuǎn)程服務(wù)的接受者<?php $class = $_POST['class'];$method = $_POST['method'];$param = $_POST['param'];call_user_func_array(array($class, $method), $params);//通過反射機(jī)制將調(diào)用轉(zhuǎn)發(fā)到對應(yīng)的方法上,這個時候參數(shù)的順序就變成異常重要了。從上面的本地服務(wù)調(diào)用和遠(yuǎn)程服務(wù)調(diào)用,他們之間簡單的區(qū)別僅僅是有無網(wǎng)絡(luò)請求,但在使用上給開發(fā)者的感覺是一致的,我都是調(diào)用一個服務(wù),服務(wù)的概念僅僅是做一個事情,而不是調(diào)用一個接口。
如果非要將RPC和網(wǎng)絡(luò)協(xié)議Http進(jìn)行對比,實際上Http并不關(guān)心你請求的參數(shù)順序而是關(guān)心請求參數(shù)對應(yīng)的鍵值名,通過鍵值名來獲取請求數(shù)據(jù)。而RPC則沒有鍵值名的概念,他的理論是減少傳輸過程中的消耗故使用序列化的排序來推測請求參數(shù),故請求參數(shù)的順序很重要,這個概念跟本地服務(wù)調(diào)用也是一致的理解。
總結(jié)
以上是生活随笔為你收集整理的pb9调用http发短信post_远程服务调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kaggle账号_机器学习竞赛入门--k
- 下一篇: 修改 class_带你探索JVM的Cla