1.簡介:PHPRPC 是一個輕型的、安全的、跨網際的、跨語言的、跨平臺的、跨環境的、跨域的、支持複雜對象傳輸的、支持引用參數傳遞的、支持內容輸出重定向的、支持分級錯誤處理的、支持會話的、面向服務的高性能遠程過程調用協議。 簡單的理解其實就是:比較小的一個擴展插件,能夠跨語言、跨平臺進行加密傳送數據,如java和php不一樣語言的數據傳輸php
2.下載:http://www.phprpc.org/zh_CN/download/ PHPRPC 的 SVN 倉庫地址爲:https://php-rpc.svn.sourceforge.net/svnroot/php-rpc/phprpc_3.0/java
3.示例:跨域
服務器:安全
<?php include ("php/phprpc_server.php"); function HelloWorld() { return 'Hello World!'; } //定義一個遠程調用的函數 $server = new PHPRPC_Server(); //建立服務器端對象 $server->add('HelloWorld'); //添加要發佈的方法 $server->start(); //啓動服務 ?>
客戶端:服務器
<?php include ("php/phprpc_client.php"); $client = new PHPRPC_Client('http://127.0.0.1/server.php'); //建立客戶端對象 echo $client->HelloWorld(); //對遠程方法(函數)的調用 ?>
4.PHPRPC for PHP 的安裝網絡
該版本直接解壓後就可使用,其中 bigint.php compat.php phprpc_date.php xxtea.php 屬於公共文件。不管是客戶端仍是服務器端都須要這些文件。session
phprpc_client.php 是客戶端文件,若是你只須要使用客戶端,那麼只要有上面那些公共文件和這個文件就可使用了,使用時,直接在你的程序中包含 phprpc_client.php 就能夠,公共文件不須要單獨包含。app
dhparams dhparams.php phprpc_server.php 這三個文件是服務器端須要的文件。 其中 dhparams 目錄中包含的是加密傳輸時用來生成密鑰的參數 dhparams.php 是用來讀取 dhparams 目錄中文件的類。 phprpc_server.php 是服務器端,若是你要使用 PHP 來發布 PHPRPC 服務,只須要包含這個文件就能夠了。公共文件和 dhparams.php 都不須要單獨包含。socket
5.運行環境 PHP 4.3+、PHP 五、PHP 6 客戶端要求開啓 socket 擴展。 服務器端須要有 IIS、Apache、lighttpd 等能夠運行 PHP 程序的 Web 服務器。 若是服務器端須要加密傳輸的能力,必需要保證 session 配置正確。svn
6.若是須要加密傳輸能力,最好開啓大整數計算擴展,PHPRPC 支持的大整數計算擴展按照計算速度(由快到慢)排名是 gmp、big_int、bcmath。若是這些擴展你一個都沒有開啓,則密鑰交換將使用 PHP 腳原本模擬大整數運算,這並不影響加密傳輸的功能,只是速度會慢一些。
7.若是你須要更快的加密處理能力,除了開啓上面所說的大整數計算擴展之外,你還能夠下載並安裝 xxtea 的 PECL 擴展,該擴展采用 C 編寫,它可以有效的提升加密速度。
8.PECL 版本的 xxtea 擴展安裝方法
安裝方法有多種,下面介紹最經常使用的三種安裝方法: 跟 PHP 一同編譯安裝 使用 phpize 工具編譯安裝 在 Windows 下使用 Microsoft Visual C(.NET 或 6.0)編譯安裝
方法一:跟 PHP 一同編譯安裝 在 PHP 源碼文件夾下建立 ext/xxtea 文件夾,將全部文件複製到新建立的文件夾下。 運行 ./buildconf 從新構建 PHP 的配置腳本。 帶選項編譯 PHP:--enable-xxtea 將做爲 PHP 內置模塊編譯,--enable-xxtea=shared 將做爲動態載入模塊編譯。
方法二:使用 phpize 工具編譯安裝 解壓縮該包內容。 運行 phpize 腳本,爲編譯 XXTEA 包準備環境。 運行 ./configure --enable-xxtea=shared 生成 makefile。 運行 make 編譯 XXTEA 擴展庫,它將被放置在 ./modules 文件夾下。 運行 make install 安裝 XXTEA 擴展庫到 PHP。
方法三:在 Windows 下使用 Microsoft Visual C(.NET 或 6.0)編譯安裝 在 PHP 源碼文件夾下建立 ext/xxtea 文件夾,將全部文件複製到新建立的文件夾下。 從你所使用的版本的 PHP 文件夾下複製 php4ts.lib(PHP 4 使用)或 php5ts.lib(PHP 5 使用)靜態庫到 ext/xxtea 文件夾下。 打開 php_xxtea.sln(MS VC.NET 的解決方案文件)或者 php_xxtea.dsw(MS VC 6.0 的工做環境文件)。嘗試編譯 Release_php4 (PHP 4 使用) 或 Release_php5(PHP 5 使用)配置。 從 ext/xxtea/Release_php4 或 ext/xxtea/Release_php5 下複製 php_xxtea.dll 到你所使用的 PHP 擴展文件夾下。擴展文件夾的路徑在 php.ini 中能夠找到。 在 php.ini 中添加這一行 extension=php_xxtea.dll
9.瞭解: PHPRPC 協議概述
PHPRPC 是一個的遠程過程調用協議。 PHPRPC 3.0 是使用 HTTP 協議做爲傳輸協議的。 PHPRPC 僅使用 HTTP 的 GET 和 POST 兩種請求方式。 PHPRPC 推薦的請求方式是 POST,僅在沒法使用 POST 進行請求操做時,才應該考慮使用 GET。 遠程過程調用中,參數和返回結果是經過 PHP 序列化形式表示的。
響應的格式採用純文本,因此服務器能夠設置響應的 Content-Type 爲 text/plain,並設置明確的字符集。
PHPRPC 數據表示
序列化與編碼
要想將這些數據經過網絡傳輸,就須要將它們序列化爲一個文本或者字節流。序列化的方式多種多樣,好比 XML 方式1,JSON 方式,二進制字節流形式2。
PHPRPC 採用的序列化方式是 PHP 序列化。
PHPRPC 是以 HTTP 協議做爲底層傳輸協議而且以 application/x-www-form-urlencoded 格式提交請求的,而傳輸的內容在序列化甚至再加密以後將會包含有不少須要 urlencode 的特殊字符,這樣編碼以後的長度將會增長 2 - 3 倍,而且還可能由於字符集的問題,形成在服務器沒法正確解析。所以,咱們在進行 urlencode 以前,先對序列化或加密後的數據進行 Base64 編碼,而後再將 Base64 編碼以後的數據中的 + 替換爲 %2B 便可完成 urlencode。通過這種變化後,長度僅增長 1/3,而且能夠避免字符集引發的解析問題。
一樣爲了不由於字符集而可能引發的對序列化數據中二進制字符串和加密內容解析錯誤,對於響應中的須要序列化或加密的內容,咱們也要作 Base64 編碼。