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); } }
* 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()); } }