Пример #1
0
 /**
  * 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 = '';
 }