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 做反向代理: