🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Http\\Response->detach [TOC] 分离响应对象。使用此方法后,`$response`对象销毁时不会自动`end`,与`Http\Response::create`和`Server::send`配合使用。 ~~~ function Http\Response->detach(); ~~~ * 客户端已完成响应,操作失败返回`false`,成功返回`true` > 需要`2.2.0`或更高版本 ## 跨进程响应 某些情况下,需要在`Task`进程中对客户端发出响应。这时可以利用`detach`使`$response`对象独立。在`Task`进程可以重新构建`$response`,发起`Http`请求响应。 ~~~ $http = new swoole_http_server("0.0.0.0", 9501); $http->set(['task_worker_num' => 1, 'worker_num' => 1]); $http->on('request', function ($req, Swoole\Http\Response $resp) use ($http) { $resp->detach(); $http->task(strval($resp->fd)); }); $http->on('finish', function () { echo "task finish"; }); $http->on('task', function ($serv, $task_id, $worker_id, $data) { var_dump($data); $resp = Swoole\Http\Response::create($data); $resp->end("in task"); echo "async task\n"; }); $http->start(); ~~~ ## 发送任意内容 某些特殊的场景下,需要对客户端发送特殊的响应内容。`Http\Response`对象自带的`end`方法无法满足需求,可以使用`detach`分离响应对象,然后自行组包并使用`Server::send`发送数据。 ~~~ $http = new swoole_http_server("0.0.0.0", 9501); $http->on('request', function ($req, Swoole\Http\Response $resp) use ($http) { $resp->detach(); $http->send($resp->fd, "HTTP/1.1 200 OK\r\nServer: server\r\n\r\nHello World\n"); }); $http->start(); ~~~