您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman異步http組件-http-client
发布时间:2021-12-29 22:33:05编辑:雪饮阅读()
workerman/http-client
说明
workerman/http-client是一个异步http客户端组件。所有请求响应异步非阻塞,内置连接池,消息请求和响应符合PSR7规则。
安装:
[root@localhost www.fpm.com]# /usr/local/php734/bin/php /usr/bin/composer require workerman/http-client
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
Using version ^0.1.7 for workerman/http-client
./composer.json has been updated
Running composer update workerman/http-client
Loading composer repositories with package information
Updating dependencies
Nothing to modify in lock file
Installing dependencies from lock file (including require-dev)
Nothing to install, update or remove
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
實例:
爲了實現client請求測試,我們需要一個http服務端:
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
// 创建一个Worker监听2345端口,使用http协议通讯
$http_worker = new Worker("http://0.0.0.0:2345");
// 启动4个进程对外提供服务
$http_worker->count = 4;
// 接收到浏览器发送的数据时回复hello world给浏览器
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// 向浏览器发送hello world
$getParams=$request->get();
$postParams=$request->post();
$response["get"]=$getParams;
$response["post"]=$postParams;
$connection->send(json_encode($response));
};
// 运行worker
Worker::runAll();
然後運行http服務端:
[root@localhost www.fpm.com]# /usr/local/php734/bin/php httpServer.php start
Workerman[httpServer.php] start in DEBUG mode
----------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
------------------------------------------ WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none http://0.0.0.0:2345 4 [OK]
---------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
然後是咱們的http客戶端:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function(){
$http = new Workerman\Http\Client();
$http->get('http://127.0.0.1:2345/', function($response){
var_dump("get:");
var_dump($response->getStatusCode());
var_dump(json_decode($response->getBody()));
}, function($exception){
var_dump("get:");
echo $exception;
});
$http->post('http://127.0.0.1:2345/', ['key1'=>'value1','key2'=>'value2'], function($response){
var_dump("post:");
var_dump($response->getStatusCode());
var_dump(json_decode($response->getBody()));
}, function($exception){
var_dump("post:");
echo $exception;
});
$http->request('http://127.0.0.1:2345/', [
'method' => 'POST',
'version' => '1.1',
'headers' => ['Connection' => 'keep-alive'],
'data' => ['key3' => 'value3', 'key4'=>'value4'],
'success' => function ($response) {
var_dump("request:");
var_dump(json_decode($response->getBody()));
},
'error' => function ($exception) {
var_dump("request:");
echo $exception;
}
]);
};
Worker::runAll();
客戶端實例運行:
[root@localhost www.fpm.com]# /usr/local/php734/bin/php httpClient.php start
Workerman[httpClient.php] start in DEBUG mode
------------------------------------- WORKERMAN --------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
-------------------------------------- WORKERS ---------------------------------------
proto user worker listen processes status
tcp root none none 1 [OK]
--------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
string(4) "get:"
int(200)
object(stdClass)#16 (2) {
["get"]=>
array(0) {
}
["post"]=>
array(0) {
}
}
string(8) "request:"
object(stdClass)#35 (2) {
["get"]=>
array(0) {
}
["post"]=>
object(stdClass)#9 (2) {
["key3"]=>
string(6) "value3"
["key4"]=>
string(6) "value4"
}
}
string(5) "post:"
int(200)
object(stdClass)#26 (2) {
["get"]=>
array(0) {
}
["post"]=>
object(stdClass)#28 (2) {
["key1"]=>
string(6) "value1"
["key2"]=>
string(6) "value2"
}
}
注意:
1、项目首先要加载require __DIR__ . '/vendor/autoload.php';
2、所有的异步编码必须在onXXX回调中编写
3、支持基于workerman开发的所有项目,包括GatewayWorker、PHPSocket.io等
关键字词:workerman,http,異步,http,client,http-client