/** * 处理请求统计 * * @param ConnectionInterface $connection * @param string $data * @return bool|void */ public function onMessage($connection, $data) { Base::getLog()->info(__METHOD__ . ' handle message', $data); $data = json_decode($data, true); if (empty($data) || !isset($data['cmd'])) { Base::getLog()->info(__METHOD__ . ' no cmd param, or the data format is wrong', $data); return false; } // 无法解析的包 if (empty($data['cmd']) || $data['cmd'] != 'REPORT_IP') { return false; } Base::getLog()->info(__METHOD__ . ' response ok'); /** @var \Workerman\Connection\ConnectionInterface $connection */ return $connection->send(json_encode(['result' => 'ok'])); }
/** * 处理请求统计 * * @param ConnectionInterface $connection * @param string $receiveBuffer */ public function onMessage($connection, $receiveBuffer) { $requestData = json_decode(trim($receiveBuffer), true); $module = Arr::get($requestData, 'module'); $interface = Arr::get($requestData, 'interface'); $cmd = Arr::get($requestData, 'cmd'); $startTime = Arr::get($requestData, 'start_time', ''); $endTime = Arr::get($requestData, 'end_time', ''); $date = Arr::get($requestData, 'date', ''); $code = Arr::get($requestData, 'code', ''); $msg = Arr::get($requestData, 'msg', ''); $offset = Arr::get($requestData, 'offset', ''); $count = Arr::get($requestData, 'count', 10); // 根据发送过来的cmd参数 switch ($cmd) { // 获取统计数据 case 'get-statistic': $buffer = ['modules' => $this->getModules($module), 'statistic' => $this->getStatistic($date, $module, $interface)]; $buffer = json_encode($buffer) . "\n"; $connection->send($buffer); break; // 获取日志 // 获取日志 case 'get-log': $buffer = json_encode($this->getStasticLog($module, $interface, $startTime, $endTime, $code, $msg, $offset, $count)) . "\n"; $connection->send($buffer); break; default: $connection->send('pack err'); } }
/** * 打包 * @param string $buffer * @return string */ public static function encode($buffer, ConnectionInterface $connection) { $len = strlen($buffer); // 还没握手不能发数据 if (empty($connection->websocketHandshake)) { $connection->send("HTTP/1.1 400 Bad Request\r\n\r\n<b>400 Bad Request</b><br>Send data before handshake. ", true); $connection->close(); return false; } $first_byte = $connection->websocketType; if ($len <= 125) { return $first_byte . chr($len) . $buffer; } else { if ($len <= 65535) { return $first_byte . chr(126) . pack("n", $len) . $buffer; } else { return $first_byte . chr(127) . pack("xxxxN", $len) . $buffer; } } }