*/ class Server { /** * 在项目的app目录下创建jsonrpc目录,它下面的类的静态方法可以被jsonrpc客户端调用 */ static $service_space = "app\\jsonrpc"; public function onMessage(TcpConnection $connection, $data) { // 判断数据是否正确 if (empty($data['class']) || empty($data['method']) || !isset($data['param_array'])) { // 发送数据给客户端,请求包错误 return $connection->send(array('code' => 400, 'msg' => 'bad request')); } // 获得要调用的类、方法、及参数 $class = self::$service_space . "\\{$data['class']}"; $method = $data['method']; $param_array = $data['param_array']; // 判断类对应文件是否载入 if (!class_exists($class)) { if (!class_exists($class) || !method_exists($class, $method)) { $code = 404; $msg = "class $class or method $method not found"; // 发送数据给客户端 类不存在 return $connection->send(array('code' => $code, 'msg' => $msg, 'data' => null)); } } // 调用类的方法 try { $ret = call_user_func_array(array($class, $method), $param_array); // 发送数据给客户端,调用成功,data下标对应的元素即为调用结果 return $connection->send($ret); } // 有异常 catch (\Exception $e) { // 发送数据给客户端,发生异常,调用失败 $code = $e->getCode() ? $e->getCode() : 500; return $connection->send(array('code' => $code, 'msg' => $e->getMessage(), 'data' => $e)); } } }