1. 程式人生 > 實用技巧 >Swoole從入門到入土(14)——HTTP伺服器[協程風格]

Swoole從入門到入土(14)——HTTP伺服器[協程風格]

在這之間,我們討論了非同步風格HTTP伺服器,它繼承自非同步風格的TCP伺服器,有著非同步風格的所有優點,同時如果碰到了大量的IO等待也會存在阻塞的缺點。

而協程風格的HTTP則很好處理了IO等待的問題。這裡要注意完全協程化的 HTTP 伺服器實現,Co\Http\Server 由於 HTTP 解析效能原因使用 C++ 編寫,因此並非由 PHP 編寫的 Co\Server 的子類。

1、成員函式

__construct():建構函式

Swoole\Coroutine\Http\Server::__construct(string $host, int $port = 0, bool $ssl
= false, bool $reuse_port = false);

$host:監聽的 IP 地址【若是本地 UNIXSocket 則應以形如 unix://tmp/xxx.sock 的格式填寫 】

$port:監聽埠,可選0~65535

$ssl:是否啟用 SSL/TLS 隧道加密

$reuse_port:是否啟用埠複用特性,開啟後多個服務可以共用一個埠

handle():註冊回撥函式以處理引數 $pattern 所指示路徑下的 HTTP 請求。

Swoole\Coroutine\Http\Server->handle(string $pattern, callable $fn): void

$pattern:設定 URL 路徑【如 /index.html,注意這裡不能傳入 http://domain】

$fn:處理函式,用法參考 Swoole\Http\Server 中的 OnRequest 回撥

注意:該函式必須在 Server::start 之前設定處理函式

2、完整示例:

Co\run(function () {
    $server = new Co\Http\Server("127.0.0.1", 9502, false);
    $server->handle('/', function ($request, $response) {
        $response
->end("<h1>Index</h1>"); }); $server->handle('/test', function ($request, $response) { $response->end("<h1>Test</h1>"); }); $server->handle('/stop', function ($request, $response) use ($server) { $response->end("<h1>Stop</h1>"); $server->shutdown(); }); $server->start(); });

協程風絡的HTTP伺服器就是這麼簡單。下一期開始,我們一起進行websocket伺服器。

2020過得好快啊,明天就是11月份了。

--------------------------- 我是可愛的分割線 ----------------------------

最後博主借地宣傳一下,漳州程式設計小組招新了,這是一個面向漳州青少年資訊學/軟體設計的學習小組,有意向的同學點選連結,聯絡我吧。