1.客戶端和服務器簡單DEMO
通過工廠方法 create
創建客戶端
$client = \Hprose\Client::create($uriList = null[, $async = true]);
create
方法與構造器函數的參數一樣,返回結果也一樣。但是第一個參數 $uriList
不能被省略。
使用 create
方法更加方便,因此,除非在創建客戶端的時候,不想指定服務地址,否則,應該優先考慮使用 create
方法來創建客戶端。
\Hprose\Client::create
支持創建 Hprose 核心庫上的客戶端,Hprose\Swoole\Client::create
支持創建 swoole 的客戶端。例如:
創建一個同步的 HTTP 客戶端
$client = \Hprose\Client::create('http://hprose.com/example/', false);
創建 HTTP 服務器
use Hprose\Http\Server; function hello($name) { return "Hello $name!"; } $server = new Server(); $server->addFunction('hello'); $server->start();
創建一個同步的 TCP 客戶端
$client = \Hprose\Client::create('tcp://127.0.0.1:1314', false);
創建 TCP 服務器
use Hprose\Socket\Server; function hello($name) { return "Hello $name!"; } $server = new Server("tcp://0.0.0.0:1314"); $server->addFunction('hello'); $server->start();
創建一個異步的 Unix Socket 客戶端
$client = \Hprose\Client::create('unix:/tmp/my.sock');
創建 UNIX Socket 服務器
use Hprose\Socket\Server; function hello($name) { return "Hello $name!"; } $server = new Server("unix:/tmp/my.sock"); $server->addFunction('hello'); $server->start();
創建一個異步的 WebSocket 客戶端
$client = \Hprose\Swoole\Client::create('ws://127.0.0.1:8080/');
創建 Web Socket 服務器
use Hprose\Swoole\Server; function hello($name) { return "Hello $name!"; } $server = new Server("ws://0.0.0.0:8088"); $server->addFunction('hello'); $server->start();
2.事件
onBeforeInvoke
事件
該事件在調用執行前觸發,該事件的處理函數形式為:
function($name, &$args, $byref, \stdClass $context) { ... }
參數 $name
是服務函數/方法名。 參數 $args
是調用的參數數組,可以聲明為引用參數。 參數 $byref
表示是否是引用參數傳遞。 參數 $context
是該調用的上下文參數。
如果在該事件中拋出異常、返回錯誤對象、或者返回一個失敗(rejected
)狀態的 promise
對象。則不再執行服務函數/方法。
onAfterInvoke
事件
該事件在調用執行后觸發,該事件的處理函數形式為:
function($name, &$args, $byref, &$result, \stdClass $context) { ... }
參數 $name
是服務函數/方法名。 參數 $args
是調用的參數數組,可以聲明為引用參數。 參數 $byref
表示是否是引用參數傳遞。 參數 $result
是調用執行的結果,可以聲明為引用參數。 參數 $context
是該調用的上下文參數。
如果在該事件中拋出異常、返回錯誤對象、或者返回一個失敗(rejected
)狀態的 promise
對象。則不再返回結果 $result
,而是將錯誤信息返回給客戶端。
onSendError
事件
該事件在服務端發生錯誤時觸發,該事件的處理函數形式為:
function(&$error, \stdClass $context) { ... }
如果在該事件中拋出異常、返回錯誤對象。則該錯誤會替代原來的錯誤信息返回給客戶端。
$error 參數可以聲明為引用參數,在事件中可以對 $error 進行修改。
當服務器與客戶端之間發生網絡中斷性的錯誤時,仍然會觸發該事件,但是不會有錯誤信息發送給客戶端。
onSendHeader
事件
該事件在服務器發送 HTTP 頭時觸發,該事件的處理函數形式為:
function(\stdClass $context) { ... }
如果在該事件中拋出異常,則不再執行后序操作,直接返回異常信息給客戶端。
onAccept
事件
該事件在 Socket 或 WebSocket 服務器接受客戶端連接時觸發,該事件的處理函數形式為:
function(\stdClass $context) { ... }
如果在該事件中拋出異常,則會斷開跟該客戶端的連接。
onClose
事件
該事件在 Socket 或 WebSocket 服務器跟客戶端之間的連接關閉時觸發,該事件的處理函數形式為:
function(\stdClass $context) { ... }
該事件中拋出異常不會對服務器和客戶端有任何影響。
onError
事件
該事件僅被 Hprose\Socket\Server
所支持,其它服務器不支持,該事件在服務器與客戶端發生通訊錯誤,無法將錯誤發送給客戶端時觸發。該事件的處理函數形式為:
function($error, \stdClass $context) { ... }
該事件中拋出異常不會對服務器和客戶端有任何影響。
官方使用手冊地址:https://github.com/hprose/hprose-php/wiki