Beispiel #1
0
 public function findOne($where = array())
 {
     if (is_array($where)) {
         $c = $this->_getColctObj();
         try {
             return $c->findOne($where);
         } catch (MongoException $e) {
             Logger::logInfo('mongo in lib findOne failed, message [' . $e->getMessage() . '] code: [' . $e->getCode() . ']');
             return false;
         }
     } else {
         Logger::logWarn('findOne where is not array');
     }
 }
 /**
  * @param $request
  * @param $response
  * @throws Exception
  */
 public function onRequest($request, $response)
 {
     /* 下面操作性能出现了比较大的下降 */
     try {
         $msg = "";
         $code = 0;
         $query = array();
         if (!isset($request->server['path_info'])) {
             throw new Exception('path_info of request->server is invaild');
         }
         $c_arr = $this->getCname($request->server['path_info']);
         if (!isset($request->server['query_string'])) {
             $query = array();
         } else {
             parse_str($request->server['query_string'], $query);
         }
         if ($this->_hasRegister($c_arr['cname'], 'http')) {
             $c = $this->_loadClass($c_arr);
             $ret = $c->httpTaskProcess($request);
             if ($this->_swoole_cfg['swoole']['gzip'] === true) {
                 $response->gzip(1);
                 $response->header('Content-Encoding', 'gzip');
             }
             /* default */
             $response->header('Content-Type', 'application/json');
             $response->header('Content-Type', 'text/html; charset=utf-8');
             /* 这里msg的类型发生了变化, 不好的编程风格 */
             is_string($ret) ? $msg .= $ret : ($msg = $ret);
             $code = 1;
         } elseif ($this->_hasRegister($c_arr['cname'], 'process')) {
             $this->_serv->task(array('c_arr' => $c_arr, 'args' => array('query' => $query)));
             $msg .= " pid: [" . posix_getpid() . "] finished";
             $code = 1;
         } else {
             $msg = $c_arr['cname'] . " not be register";
             $code = 0;
         }
         $response->end(json_encode(array('code' => $code, 'msg' => $msg), JSON_UNESCAPED_UNICODE));
     } catch (Exception $e) {
         $msg = "throw error message: [" . $e->getMessage() . "] error code : [" . $e->getCode() . "]\n";
         Logger::logWarn($msg . "" . $e->getTraceAsString());
         $response->end(json_encode(array('code' => 0, 'msg' => $msg)));
     }
 }
 protected static function logWarn($message, $category)
 {
     if (class_exists('Logger')) {
         Logger::logWarn($message, $category);
     }
 }
Beispiel #4
0
 * Date: 2015/11/10
 * Time: 11:45
 * Description: 程序入口,所以的throw异常如果没有被业务捕获,将在这里进行捕获
 */
define('WORKROOT', __DIR__);
date_default_timezone_set("Asia/Shanghai");
$cfg_file = WORKROOT . '/conf/swoole.config.php';
if (!file_exists($cfg_file)) {
    throw new Exception($cfg_file . 'not exsits');
}
$cfg = (require_once $cfg_file);
$sw_file = WORKROOT . '/swooleserver.php';
if (!file_exists($sw_file)) {
    throw new Exception($sw_file . 'not exsits');
}
/* 全局日志 */
$log_file = WORKROOT . '/lib/log/logger.php';
if (!file_exists($log_file)) {
    throw new Exception($log_file . ' not exsits');
}
try {
    require_once $sw_file;
    require_once $log_file;
    $sw = new swooleserver($cfg);
    $sw->onInit();
    $sw->onStart();
    $sw->onExit();
} catch (Exception $e) {
    Logger::logWarn("throw error message: [" . $e->getMessage() . "] error code : [" . $e->getCode() . "]");
    Logger::logWarn($e->getTraceAsString());
}
 /**
  * 这里使用了一个类回调函数, 这样做很不方便, 没有对开发者进行约束
  * call_user_func_array函数会出现crash, 后面考虑优化
  * @param $obj
  * @throws Exception
  */
 public function consumeStart($obj, $cb)
 {
     $topic = $this->_getTopic($this->_topicname);
     /* RD_KAFKA_OFFSET_BEGINNING, RD_KAFKA_OFFSET_END, RD_KAFKA_OFFSET_STORED */
     try {
         $topic->consumeStart($this->_partition, $this->_offset);
         $counter = 60;
         //这里休息60s, 如果队列中还没有消息可读,就退出了
         while (true && $counter > 0) {
             $msg = $topic->consume($this->_partition, 1000);
             if ($msg == null || isset($msg) && $msg->err) {
                 Logger::logWarn('sleep 1s msg error: ');
                 $counter--;
                 sleep(1);
                 continue;
             } else {
                 if (method_exists($obj, $cb)) {
                     call_user_func_array(array($obj, $cb), array($msg));
                 } else {
                     throw new Exception('no callback in obj');
                 }
             }
         }
     } catch (RdKafka\Exception $e) {
         throw new Exception('kafka error: ' . $e->getMessage());
     }
 }