public function handleRequest(ConnectionInterface $conn, Request $request, $bodyBuffer) { $response = new HttpResponse($conn); $response->on('close', array($request, 'close')); if (!$this->listeners('request')) { $response->end(); return; } $this->emit('request', array($request, $response)); $request->emit('data', array($bodyBuffer)); }
/** * @param \React\Http\Request $request * @param HttpResponse $response * * @return bool returns true if successfully served */ protected function serveStatic(\React\Http\Request $request, HttpResponse $response) { $filePath = $this->getBridge()->getStaticDirectory() . $request->getPath(); if (substr($filePath, -4) !== '.php' && is_file($filePath)) { $mTime = filemtime($filePath); if (isset($request->getHeaders()['If-Modified-Since'])) { $ifModifiedSince = $request->getHeaders()['If-Modified-Since']; if ($ifModifiedSince && strtotime($ifModifiedSince) === $mTime) { // Client's cache IS current, so we just respond '304 Not Modified'. $response->writeHead(304, ['Last-Modified' => gmdate('D, d M Y H:i:s', $mTime) . ' GMT']); $response->end(); return true; } } $expires = 3600; //1 h $response->writeHead(200, ['Content-Type' => $this->mimeContentType($filePath), 'Content-Length' => filesize($filePath), 'Pragma' => 'public', 'Cache-Control' => 'max-age=' . $expires, 'Last-Modified' => gmdate('D, d M Y H:i:s', $mTime) . ' GMT', 'Expires' => gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT']); $response->end(file_get_contents($filePath)); return true; } return false; }
/** * @param \React\Http\Request $request * @param HttpResponse $response * @return bool returns true if successfully served */ protected function serveStatic(\React\Http\Request $request, HttpResponse $response) { $filePath = $this->getBridge()->getStaticDirectory() . $request->getPath(); if (substr($filePath, -4) !== '.php' && is_file($filePath)) { $response->writeHead(200, ['Content-Type' => $this->mimeContentType($filePath), 'Content-Length' => filesize($filePath)]); $response->end(file_get_contents($filePath)); return true; } return false; }