日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

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

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