php yar swoole 比较,syar:Swoole 实现的 Yar 服务
為何用swoole來實現 Yar server
歷史代碼使用了yar, 不想過多修改客戶端代碼
提升Yar服務端執行效率
學習swoole, yar(在此感謝laruence,rango及swoole開發團隊)
Require
php5.4+
ext-swoole 1.8.8+
ext-msgpack 如果yar使用msgpack編碼方式
Install
composer require 'stcer/syar:*'
Example
服務端example\server.php
use syar\Server;
use syar\log\File as FileLog;
use syar\log\Log;
$vendorPath = __Your vendor path__;
/** @var \Composer\Autoload\ClassLoader $loader */
$loader = include($vendorPath . "/autoload.php");
$loader->addPsr4('syar\\example\\service\\', __DIR__ . '/service');
$server = new Server('0.0.0.0', '5604');
$server->setLogger(new Log());
$service = new \syar\example\service\Test();
$server->setDispatcher(function(\syar\Token $token, $isDocument) use ($service){
if(!$isDocument){
$method = $token->getMethod();
$params = $token->getArgs();
$value = call_user_func_array(array($service, $method), $params);
} else {
$value = "Yar api document";
}
return $value;
});
$server->run(['max_request' => 10000]);
example/service/Test.php
namespace syar\example\service;
/**
* Class Test
* @package syar\example\service
*/
class Test {
public function getName($userName){
return $userName . " Hello";
}
public function getAge(){
return 20;
}
}
命令行啟動server.php
#php server.php
客戶端
$url = "http://127.0.0.1:5604/test";
$client = new Yar_client($url);
$name = $client->getName("tester");
$age = $client->getAge();
//
echo "
\n";
var_dump($name);
var_dump($age);
擴展特性
接口批量請求
批量請求的接口,服務端使用多個任務進程并行執行
請求地址 http://{your_server_address}/multiple
調用方法名 function calls($requests); $requests參數格式 [請求1數組, 請求2數組, ...], 請求數據格式:['api' => ApiName, 'method' => MethodName, 'params' => []]
單個接口執行錯誤, 服務端記錄錯誤日志, 返回['code' => CODE, 'error' => ERROR MESSAGE]格式數組, 客戶端自行處理
客戶端請求示例:
#example/client_mul.php
$vendorPath = ...;
$loader = include($vendorPath . "/autoload.php");
$url = "http://127.0.0.1:5604/multiple";
$client = new Yar_client($url);
$calls = [
'age' => [
'api' => '/test',
'method' => 'getAge',
'params' => []
],
'name' => [
'api' => '/test',
'method' => 'getName',
'params' => [rand(1, 245301)]
]
];
$rs = $client->calls($calls);
var_dump($rs);
投遞任務到task進程異步執行
參考
TaskMananger->regTask()
TaskMananger->doTask()
TaskMananger->doTasks()
TaskMananger->doTasksAsync()
已知問題
未完成文檔解析, 可使用自帶的yar server顯示文檔
由于代碼是從私有框架獨立出來,可能存在未知bug
總結
以上是生活随笔為你收集整理的php yar swoole 比较,syar:Swoole 实现的 Yar 服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运行php能运行asp么,配置使web
- 下一篇: 小森生活铁锭怎么合成?