/** * Send websocket handshake. * * @param \Workerman\Connection\TcpConnection $connection * @return void */ public static function sendHandshake($connection) { if (!empty($connection->handshakeStep)) { return; } // Get Host. $port = $connection->getRemotePort(); $host = $port === 80 ? $connection->getRemoteHost() : $connection->getRemoteHost() . ':' . $port; // Handshake header. $header = 'GET ' . $connection->getRemoteURI() . " HTTP/1.1\r\n" . "Host: {$host}\r\n" . "Connection: Upgrade\r\n" . "Upgrade: websocket\r\n" . "Origin: " . (isset($connection->websocketOrigin) ? $connection->websocketOrigin : '*') . "\r\n" . "Sec-WebSocket-Version: 13\r\n" . "Sec-WebSocket-Key: " . base64_encode(sha1(uniqid(mt_rand(), true), true)) . "\r\n\r\n"; $connection->send($header, true); $connection->handshakeStep = 1; $connection->websocketCurrentFrameLength = 0; $connection->websocketDataBuffer = ''; $connection->tmpWebsocketData = ''; }