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" } }