Пример #1
0
 /**
  * 网关有消息时,判断消息是否完整
  */
 public static function onGatewayMessage($buffer)
 {
     if ($buffer[0] == '{') {
         return JsonProtocol::check($buffer);
     } else {
         return TextProtocol::check($buffer);
     }
 }
Пример #2
0
 /**
  * 服务端接收数据
  *
  * @param $serv      swoole_server对象
  * @param $fd        连接的描述符
  * @param $from_id   reactor的id,无用
  * @param $data      接收数据
  */
 public function onReceive(swoole_server $serv, $fd, $from_id, $data)
 {
     //检测数据完整性
     if (JsonProtocol::check($data) != 0) {
         return;
     }
     $data = JsonProtocol::decode($data);
     //接收参数
     $class = $data['class'];
     $method = $data['method'];
     $params = $data['params'];
     $startTime = $this->microtimeFloat();
     // 判断类对应文件是否载入
     if (!class_exists($class)) {
         $include_file = ROOT_DIR . "Server/{$class}.php";
         if (is_file($include_file)) {
             require_once $include_file;
         }
         if (!class_exists($class)) {
             $code = 404;
             $msg = "class {$class} not found";
             $result = array('code' => $code, 'msg' => $msg, 'data' => null);
             $serv->send($fd, JsonProtocol::encode($result));
         }
     }
     // 调用类的方法
     try {
         $ret = call_user_func_array(array(new $class(), $method), $params);
         $code = $ret['code'];
         $msg = $ret['msg'];
         // 发送数据给客户端,调用成功,data下标对应的元素即为调用结果
         $serv->send($fd, JsonProtocol::encode($ret));
     } catch (Exception $e) {
         // 发送数据给客户端,发生异常,调用失败
         $code = $e->getCode() ? $e->getCode() : 500;
         $msg = $e->getMessage();
         $result = array('code' => $code, 'msg' => $msg, 'data' => $e);
         $serv->send($fd, JsonProtocol::encode($result));
     }
     //请求数据统计,放在task执行
     $executionTime = $this->microtimeFloat() - $startTime;
     $report = array('class' => $class, 'method' => $method, 'params' => json_encode($params), 'code' => $code, 'msg' => $msg, 'execution' => $executionTime, 'time' => time());
     $serv->task(json_encode($report));
 }