<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # RPC [上一頁](# "上一頁")[下一頁](# "下一頁") **RPC**(Remote Procedure Call Protocol)遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。 RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息的到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。 ThinkPHP支持廣泛的RPC協議,包括PHPRPC、HPRose、JsonRPC以及Yar。 ### PHPRPC支持 PHPRPC 是一個輕型的、安全的、跨網際的、跨語言的、跨平臺的、跨環境的、跨域的、支持復雜對象傳輸的、支持引用參數傳遞的、支持內容輸出重定向的、支持分級錯誤處理的、支持會話的、面向服務的高性能遠程過程調用協議。目前該協議的最新版本為 3.0。詳細的資料可以參考phprpc官網( [http://www.phprpc.org/zh_CN/](http://www.phprpc.org/zh_CN/)) ThinkPHP提供了對PHPRpc的服務端和客戶端調用的支持(客戶端是跨平臺跨語言的,可以支持任何語言的調用)。 服務器端的實現非常簡單,你只需要把控制器繼承Think\Controller\RpcController類即可。 例如: ~~~ namespace Home\Controller; use Think\Controller\RpcController; class ServerController extends RpcController{ public function test1(){ return 'test1'; } public function test2(){ return 'test2'; } private function test3(){ return 'test3'; } protected function test4(){ return 'test3'; } } ~~~ 這樣,ServerController控制器就變成了一個PHPRpc服務端,請求地址為: ~~~ http://serverName/index.php/Home/Server ~~~ rpc客戶端可以調用`test1`和`test2`方法。方法的返回值可以支持數組等PHPRpc支持的格式。 > 注意:如果設置了不同的URL模式的話,服務器端請求地址需要相應調整。 可以使用**allowMethodList**屬性設置允許訪問的方法列表,例如: ~~~ namespace Home\Controller; use Think\Controller\RpcController; class ServerController extends RpcController{ protected $allowMethodList = array('test1','test2'); public function test1(){ return 'test1'; } public function test2(){ return 'test2'; } public function test3(){ return 'test3'; } } ~~~ 上面的設置表示只允許`test1`和`test2`方法被rpc客戶端調用。 > 你可以采用多個控制器進行不同的PHPRpc Server端用于不同的需要。 如果要在ThinkPHP里面進行客戶端調用,可以使用下面的代碼: ~~~ namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index(){ Vendor('phpRPC.phprpc_client'); $client = new \PHPRPC_Client('http://serverName/index.php/Home/Server'); // 或者采用 //$client = new \PHPRPC_Client(); //$client->useService('http://serverName/index.php/Home/Server'); $result = $client->test1(); } } ~~~ 其中test1就是服務器端定義的方法。其他使用和PHP的方法調用一致。 ### Hprose支持 **Hprose** (High Performance Remote Object Service Engine) 是一個MIT開源許可的新型輕量級跨語言跨平臺的面向對象的高性能遠程動態通訊中間件。它支持眾多語言,例如nodeJs, C++, .NET, Java, Delphi, Objective-C, ActionScript, JavaScript, ASP, PHP, Python, Ruby, Perl 等語言,通過 Hprose 可以在這些語言之間實現方便且高效的互通。 你可以認為它是 PHPRPC 的商業版本,但是它跟 PHPRPC 完全不同,hprose 協議是全新設計的,比 PHPRPC 更加高效,實現也完全是全部從頭開始的,比 PHPRPC 更加易用。更多信息可以參考([http://www.hprose.com/](http://www.hprose.com/)) ThinkPHP同樣也提供了對Hprose的服務端和客戶端調用的支持。 服務器端的使用和PHPRPC的區別只是把控制器繼承Think\Controller\HproseController類即可,其他用法基本一致,例如: ~~~ namespace Home\Controller; use Think\Controller\HproseController; class ServerController extends HproseController{ public function test1(){ return 'test1'; } public function test2(){ return 'test2'; } } ~~~ 我們可以進行一些hprose服務器端的參數設置,包括debug、crossDomain、P3P和get,設置方法如下: ~~~ namespace Home\Controller; use Think\Controller\HproseController; class ServerController extends HproseController{ protected $crossDomain = true; protected $P3P = true; protected $get = true; protected $debug = true; public function test1(){ return 'test1'; } public function test2(){ return 'test2'; } } ~~~ 采用ThinkPHP的Hprose的客戶端調用示例如下: ~~~ namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index(){ vendor('Hprose.HproseHttpClient'); $client = new \HproseHttpClient('http://serverName/index.php/Home/Server'); // 或者采用 //$client = new \HproseHttpClient(); //$client->useService('http://serverName/index.php/Home/Server'); $result = $client->test1(); } } ~~~ ### JsonRPC支持 json-rpc是基于json的跨語言遠程調用協議,比xml-rpc、webservice等基于文本的協議傳輸數據格小;相對hessian、java-rpc等二進制協議便于調試、實現、擴展,是非常優秀的一種遠程調用協議。 ThinkPHP3.2提供了對JsonRPC的服務器端和客戶端調用支持,服務器端實現示例: ~~~ namespace Home\Controller; use Think\Controller\JsonRpcController; class ServerController extends JsonRpcController { public function index(){ return 'Hello, JsonRPC!'; } // 支持參數傳入 public function test($name=''){ return "Hello, {$name}!"; } } ~~~ 所有的public方法都可以用于遠程調用,客戶端調用方式如下: ~~~ namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index(){ vendor('jsonRPC.jsonRPCClient'); $client = new \jsonRPCClient('http://serverName/index.php/Home/Server'); $result = $client->index(); var_dump($result); // 結果:Hello, JsonRPC! $result = $client->test('ThinkPHP'); var_dump($result); // 結果:Hello, ThinkPHP! } } ~~~ ### Yar支持 Yar (yet another RPC framework) 是一個PHP擴展的RPC框架, 和現有的RPC框架(xml-rpc, soap)不同, 這是一個輕量級的框架, 支持多種打包協議(msgpack, json, php), 并且最重要的一個特點是, 它是可并行化的。 要使用Yar支持首先需要安裝Yar擴展,擴展下載地址:[http://pecl.php.net/package/yar](http://pecl.php.net/package/yar) Yar說明文檔:[http://hk2.php.net/manual/zh/book.yar.php](http://hk2.php.net/manual/zh/book.yar.php) 安裝好擴展后,使用ThinkPHP就可以開發服務器端,示例如下: ~~~ namespace Home\Controller; use Think\Controller\YarController; class ServerController extends YarController { public function index(){ return 'Hello, Yar RPC!'; } public function hello($name=''){ return 'Hello, {$name}!'; } } ~~~ > Yar除了并行,還有一個亮點,通過GET方式可以查看到接口列表及注釋。 客戶端調用示例如下: ~~~ namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index(){ $client = new \Yar_client('http://serverName/index.php/Home/Server'); $result = $client->index(); var_dump($result); // 結果:Hello, Yar! } } ~~~ [上一頁](# "上一頁")[下一頁](# "下一頁")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看