on('request', function (\React\Http\Request $request, \React\Http\Response $response) use ($negotiator, $ms) { $psrRequest = new \GuzzleHttp\Psr7\Request($request->getMethod(), $request->getPath(), $request->getHeaders()); $negotiatorResponse = $negotiator->handshake($psrRequest); $response->writeHead( $negotiatorResponse->getStatusCode(), array_merge( $negotiatorResponse->getHeaders(), ["Content-Length" => "0"] ) ); if ($negotiatorResponse->getStatusCode() !== 101) { $response->end(); return; } $msg = null; $request->on('data', function($data) use ($ms, $response, &$msg) { $msg = $ms->onData($data, $msg, function(MessageInterface $msg, \React\Http\Response $conn) { $conn->write($msg->getContents()); }, function(FrameInterface $frame, \React\Http\Response $conn) use ($ms) { switch ($frame->getOpCode()) { case Frame::OP_CLOSE: $conn->end($frame->getContents()); break; case Frame::OP_PING: $conn->write($ms->newFrame($frame->getPayload(), true, Frame::OP_PONG)->getContents()); break; } }, $response); }); }); $socket->listen(9001, '0.0.0.0'); $loop->run();