/** * Send handshake HTTP/1.1 response to the client to enable protocol switching. * * @param BufferedDuplexStreamInterface $socket * @param HttpRequest $request */ protected function sendHandshake(BufferedDuplexStreamInterface $socket, HttpRequest $request) : \Generator { $accept = base64_encode(sha1($request->getHeaderLine('Sec-WebSocket-Key') . self::GUID, true)); $message = sprintf("HTTP/%s 101 Switching Protocols\r\n", $request->getProtocolVersion()); $message .= "Connection: Upgrade\r\n"; $message .= "Upgrade: websocket\r\n"; $message .= sprintf("Sec-WebSocket-Accept: %s\r\n", $accept); $message .= "Sec-WebSocket-Version: 13\r\n"; $message .= "\r\n"; yield from $socket->write($message); }