天天看點

swoole學習筆記(二)建立web伺服器

Http伺服器隻需要關注請求響應即可,是以隻需要監聽一個onRequest事件。當有新的Http請求進入就會觸發此事件。事件回調函數有2個參數,一個是$request對象,包含了請求的相關資訊,如GET/POST請求的資料。

另外一個是response對象,對request的響應可以通過操作response對象來完成。$response->end()方法表示輸出一段HTML内容,并結束此請求。

示例代碼:

$http = new swoole_http_server("0.0.0.0", 8080);

$http->on('request', function ($request, $response) {
    $response->header("Content-Type", "text/html; charset=utf-8");
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});

$http->start();
           

1.swoole_http_server 函數

該函數用于開啟一個http伺服器,第一個參數是綁定的IP,第二個參數是端口号。 - 0.0.0.0 表示監聽所有IP位址,一台伺服器可能同時有多個IP,如127.0.0.1本地回環IP、192.168.1.100區域網路IP、210.127.20.2 外網IP,這裡也可以單獨指定監聽一個IP。 - 8080 監聽的端口,如果被占用程式會抛出緻命錯誤,中斷執行。

2.回調函數中的$response對象

$response對象實際上是Swoole\Http\Response,其中包含2個方法header和end,用于輸出響應頭和輸出實體内容。

3.回調函數中的$request對象

$request對象實際上是Swoole\Http\Request,可以用于擷取送出過來的get和post參數,以及請求頭,服務等資訊。其包含4個主要屬性: $request->header,$request->server,$request->get,$request->post

示例代碼:

object(Swoole\Http\Request)#5 (5) {   ["fd"]=>   int(1)   ["header"]=>   array(5) {     ["user-agent"]=>     string(11) "curl/7.29.0"     ["host"]=>     string(14) "127.0.0.1:8080"     ["accept"]=>     string(3) "*/*"     ["content-length"]=>     string(2) "10"     ["content-type"]=>     string(33) "application/x-www-form-urlencoded"   }   ["server"]=>   array(11) {     ["query_string"]=>     string(12) "action=hello"     ["request_method"]=>     string(4) "POST"     ["request_uri"]=>     string(1) "/"     ["path_info"]=>     string(1) "/"     ["request_time"]=>     int(1487822502)     ["request_time_float"]=>     float(1487822502.6969)     ["server_port"]=>     int(8080)     ["remote_port"]=>     int(37577)     ["remote_addr"]=>     string(9) "127.0.0.1"     ["server_protocol"]=>     string(8) "HTTP/1.1"     ["server_software"]=>     string(18) "swoole-http-server"   }   ["get"]=>   array(1) {     ["action"]=>     string(5) "hello"   }   ["post"]=>   array(1) {     ["name"]=>     string(5) "hello"   } }