Http\Server继承自Server,Server提供的所有API和配置项都可以使用,进程模型也是一致的
use Swoole\Http\Server;
// 配置服务ip和端口
$http = new Server('0.0.0.0', 9501);
// 配置服务参数
$http->set([
'upload_tmp_dir' => '/data/uploadfiles/', // 设置上传文件的临时目录。目录最大长度不得超过220字节
'http_parse_post' => false, // 设置POST消息解析开关,默认开启,true自动将Content-Type为x-www-form-urlencoded的请求包体解析到POST数组。
'http_parse_cookie' => false, // 关闭Cookie解析,将在header中保留未经处理的原始的Cookies信息。默认开启
'http_parse_files' => false, // 设置上传文件解析开关。默认开启
'open_http2_protocol' => false, // 启用HTTP2协议解析
'http_compression' => false, // 针对Response对象的配置,启用压缩。默认为开启。使用write方法,将会强制关闭压缩,目前支持gzip、br、deflate三种压缩格式,底层会根据浏览器客户端传入的 Accept-Encoding 头自动选择压缩方式
'http_compression_level' => 1, // 压缩级别,1-9
'compression_min_length' => 128, // 设置开启压缩的最小字节,超过该选项值才开启压缩
'enable_static_handler' => true, // 开启静态文件请求处理功能,默认false;
'document_root' => '/data/webroot/example.com', // 静态文件根目录,必须为绝对路径,与enable_static_handler配合使用。底层收到Http请求会先判断document_root路径下是否存在此文件,如果存在会直接发送文件内容给客户端,不再触发 onRequest 回调。
'static_handler_locations' => ['/static', '/app/images'], // 设置静态处理器的路径。类型为数组,默认不启用。类似于Nginx的location指令,可以指定一个或多个路径为静态路径。只有URL在指定路径下才会启用静态文件处理器,否则会视为动态请求。必须以/开头
]);
// 监听请求接口
$http->on('request', function (\Swoole\Http\Request $request, \Swoole\Http\Response $response) use ($http) {
// $_SERVER
$request->server;
// 请求头
$request->header;
// $_GET,参数最大不允许超过128个
$request->get;
// $_POST,参数最大不允许超过128个,与header加起来不能超过package_max_length的设置
$request->post;
// $_COOKIE
$request->cookie;
// $_FILES,最大文件尺寸不得超过package_max_length设置的值
$request->files;
// 获取原始的POST包体,用于非application/x-www-form-urlencoded格式的HTTP POST请求
$request->getContent();
// 获取完整的原始Http请求报文。包括Http Header和Http Body
$request->getData();
// 获取当前的HTTP请求的请求方式
$request->getMethod();
// 发送异步任务
$http->task(strval($response->fd));
// 设置HTTP响应的Header信息$key=>$value,$format为true将对Key进行HTTP约定格式化
$response->header($key, $value, $format = true);
// 将Header信息$key=>$value附加到HTTP响应的末尾,$format为true将对Key进行HTTP约定格式化;仅在HTTP2中可用,用于消息完整性检查,数字签名等。
$response->trailer($key, $value, $ucwords = true);
// 设置HTTP响应的cookie信息$key=>$value。与setcookie方法一致。Swoole会自动会对$value进行urlencode编码,可使用rawCookie()方法关闭对$value的编码处理
$response->cookie($key, $value = '', $expire = 0 , $path = '/', $domain = '', $secure = false , $httponly = false, $samesite = '', $priority = '');
// 设置HTTP响应的cookie信息,与cookie方法相同,只不过不进行编码处理
$response->rawCookie($key, $value = '', $expire = 0 , $path = '/', $domain = '', $secure = false , $httponly = false, $samesite = '', $priority = '');
// 发送Http状态码;未传递$reason时$http_status_code必须为合法HttpCode,传递时$http_status_code不限制
$response->status($http_status_code, $reason);
// 发送Http重定向。调用此方法会自动end发送并结束响应。
$response->redirect($url, $http_code = 302);
//发送文件到浏览器,需要在header中指定Content-Type,调用sendfile前不得使用write方法发送Http-Chunk,调用sendfile后底层会自动执行end,
// sendfile不支持gzip压缩
// 可以指定文件的起始偏移量$offset和长度$length
$response->sendfile($filename, $offset = 0, $length = 0);
// 启用Http Chunk分段向浏览器发送相应内容,$data长度不得超过2M,受buffer_output_size配置项控制
// 使用write分段发送数据后,end方法将不接受任何参数,调用end只是会发送一个长度为0的Chunk表示数据传输完毕。
$response->write($data);
// 发送Http 响应体,并结束请求处理,end只能调用一次,如果需要分多次向客户端发送数据,请使用write方法
$response->end(string $html);
});
// 异步任务
$http->on('task', function ($serv, $task_id, $worker_id, $data) {
// 判断Swoole\Http\Response对象是否已结束 (end) 或已分离 (detach)。
$response->isWritable();
//分离响应对象。使用此方法后,$response对象销毁时不会自动end,与Http\Response::create和Server->send配合使用。
$response->detach();
// 以客户端连接$fd创建一个新的Swoole\Http\Response对象
$resq = Swoole\Http\Response::create($fd);
$resq->send($resp->fd, "HTTP/1.1 200 OK\r\nServer: server\r\n\r\nHello World\n");
});
$http->start();