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