public function onReceive(SwooleServer $server, $fd, $fromId, $data) { if ($this->debug) { $this->debugData = []; Timer::start(); } $length = unpack('N', $data)[1]; $data = unserialize(substr($data, -$length)); $_REQUEST = $_GET = $_POST = isset($data['request']) ? $data['request'] : []; $_COOKIE = isset($data['cookies']) ? $data['cookies'] : []; $_FILES = isset($data['files']) ? $data['files'] : []; $_SERVER = isset($data['server']) ? $data['server'] : []; foreach ($this->environmentVariables as $k => $v) { $_SERVER[$k] = $v; } $this->reset(); ob_start(); $response = Router::dispatch(); $extraContent = ob_get_clean(); $headers = $this->parseResponseHeaders($response); $body = $response->getContent(); $result = serialize(['headers' => $headers, 'body' => $body . $extraContent, 'meta' => $this->debug ? $this->getDebugInfo($server) : ['service' => 1]]); $server->send($fd, pack('N', $outputLength = strlen($result)), $fromId); if ($outputLength >= $this->config['buffer_output_size']) { foreach (str_split($result, $this->config['chunk_output_size']) as $chunk) { $server->send($fd, $chunk, $fromId); } } else { $server->send($fd, $result, $fromId); } }