日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

php yar swoole 比较,syar:Swoole 实现的 Yar 服务

發布時間:2023/11/27 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。