5.Http Server

1.Swoole Http Server

http server 基于 swoole_server , 在 swoole_server 基础上,
增加了 http 协议的解析, 并且把 http 协议的请求部分,封装成了 Request 对象.
将 http 协议的响应封装成 Response 对象。


2.swoole_http_server


swoole_http_server 相较于原本的 swoole_server , 新增了一个 onRequest() 回调函数.
这个函数用于处理来自客户端的 http 请求。

swoole_http_server 不再接受 onReceive 回调,只能使用 onRequest() 回调.

$request/$response 对象传递给其他函数时,不要加 & 引用符号。这是因为在 swoole 的底层实现中,这2个对象,
每个请求过来,都会新 new 一个 request 对象,和 response 对象。当我们使用引用符号将这2个对象传递出去的时候,
这2个对象的引用计数会+1, 如果请求结束之后,我们没有及时的释放引用,那么在这个请求结束之后,对象不会被销毁。会造成内存泄漏。

3.swoole_http_requesst



4.swoole_http_response



header,cookie,status,gzip 这4个函数要在 end 函数之前使用。
write,sendfile 底层会自动调用 end .
在 调用 end 函数之后,如果浏览器没有开始 keepalive , 这个连接就会断开。
如果开启了,这个连接就会被保持用于下次请求。
$serv = new swoole_http_server('127.0.0.1', 9502);

$serv->on('Request', function($request, $response) {
    var_dump($request->get);
    var_dump($request->post);
    var_dump($request->cookie);
    var_dump($request->files);
    var_dump($request->header);
    var_dump($request->server);

    $response->cookie('User', 'Swoole');
    $response->header('X-Server', 'Swoole');
    $response->end('<h1>Hello,Swoole</h1>');
});

$serv->start();

// 注意
// 除了 header 和 server 外, 其他4个变量可能没有赋值,因此使用前需要用 isset 判定





用 Nginx 做反向代理:









猜你喜欢

转载自blog.csdn.net/enlyhua/article/details/80686918