HTTP 非同步風格伺服器 # http_server.php $http = new Swoole\Http\Server("0.0.0.0", 9501); // 設置伺服器運行參數 $serv->set(array( 'daemonize' => 1, // 作為守護進程運行,需同時設置log_ ...
HTTP 非同步風格伺服器
# http_server.php
$http = new Swoole\Http\Server("0.0.0.0", 9501);
// 設置伺服器運行參數
$serv->set(array(
'daemonize' => 1, // 作為守護進程運行,需同時設置log_file
'log_file' => '/www/logs/swoole.log', // 指定標準輸出和錯誤日誌文件
));
// 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->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 。