HTTP 異步風格服務器
# http_server.php
$http = new Swoole\Http\Server("0.0.0.0", 9501);
// 設定服務器運行引數
$http->set(array(
'daemonize' => 1, // 作為守護行程運行,需同時設定log_file
'log_file' => '/www/logs/swoole.log', // 指定標準輸出和錯誤日志檔案
'worker_num' => 4, // 設定啟動的作業行程數,默認為CPU核數,全異步IO可以設定為 CPU 核數的 1-4 倍
));
// HTTP 服務器只需要監聽 onRequest 事件
$http->on('request', function ($request, $response) {
// 回應 favicon.ico 請求
if ($request->server['path_info'] == '/favicon.ico' || $request->server['request_uri'] == '/favicon.ico') {
$response->end();
return;
}
var_dump($request->get, $request->post);
// URL路由器
list($controller, $action) = explode('/', trim($request->server['request_uri'], '/'));
if (empty($controller)) {
$controller = 'IndexController';
}
if (empty($action)) {
$action = 'index';
}
(new $controller)->$action($request, $response);
});
class IndexController {
public function index($request, $response) {
$rand = rand(1000, 9999);
$response->header("Content-Type", "text/html; charset=utf-8");
// 輸出一段 HTML 內容
$response->end("<h1>Hello Swoole. #{$rand}</h1>");
}
}
// 啟動 HTTP 服務器
$http->start();
運行并測驗 HTTP 異步風格服務器
# 如果程式已經運行,先結束行程
kill -9 11591
# 在 cli 命令列環境運行服務端
php http_server.php
# 查看服務器監聽的埠
netstat -an | grep 9501
# 訪問 http://127.0.0.1:9501 查看程式的結果
curl http://127.0.0.1:9501
# 使用 Apache bench 工具進行壓力測驗
ab -c 200 -n 200000 -k http://127.0.0.1:9501/
使用 Nginx 作為代理
server {
root /wwwroot/swoole_demo/;
server_name local.swoole.com;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header X-Real-IP $remote_addr;
if (!-e $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
}
}
HTTP 協程風格服務器
Co\run(function () {
$server = new Co\Http\Server("127.0.0.1", 9501, false);
// 設定服務器運行引數
$server->set(array(
'daemonize' => 1, // 作為守護行程運行,需同時設定log_file
'log_file' => '/www/logs/swoole.log', // 指定標準輸出和錯誤日志檔案
));
$server->handle('/', function ($request, $response) use ($server) {
// URL路由器
list($controller, $action) = explode('/', trim($request->server['request_uri'], '/'));
if (empty($controller)) {
$controller = 'IndexController';
}
if (empty($action)) {
$action = 'index';
}
(new $controller)->$action($request, $response);
});
$server->start();
});
HTTP 協程客戶端
官方建議使用 Saber ,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/20946.html
標籤:PHP
