protected function checkHeader($client_id, $http_data) { //新的连接 if (!isset($this->requests[$client_id])) { if (!empty($this->buffer_header[$client_id])) { $http_data = $this->buffer_header[$client_id] . $http_data; } //HTTP结束符 $ret = strpos($http_data, self::HTTP_EOF); //没有找到EOF,继续等待数据 if ($ret === false) { return false; } else { $this->buffer_header[$client_id] = ''; $request = new Request(); //GET没有body list($header, $request->body) = explode(self::HTTP_EOF, $http_data, 2); $request->head = $this->parser->parseHeader($header); //使用head[0]保存额外的信息 $request->meta = $request->head[0]; unset($request->head[0]); //保存请求 $this->requests[$client_id] = $request; //解析失败 if ($request->head == false) { $this->log("parseHeader failed. header=" . $header); return false; } } } else { $request = $this->requests[$client_id]; $request->body .= $http_data; } return $request; }
/** * 握手 * @param $headerBuffer * @return bool */ function doHandShake($headerBuffer) { $header = Swoole\Http\Parser::parseHeader($headerBuffer); if (!isset($header['Sec-WebSocket-Accept'])) { $this->disconnect(); return false; } if ($header['Sec-WebSocket-Accept'] != base64_encode(pack('H*', sha1($this->key . self::GUID)))) { $this->disconnect(); return false; } $this->handshake = true; $this->header = $header; return true; }