乐于分享
好东西不私藏

Apollo源码深读(一):传感器到方向盘的完整数据流

Apollo源码深读(一):传感器到方向盘的完整数据流

打开Apollo源码仓库,50万行C++代码,从哪读?我选了一个最笨但最有效的办法——跟踪数据流,看一帧激光雷达数据怎么最终变成方向盘的转动。

封面图

Cyber RT:Apollo的神经系统

Apollo不用ROS,自研了Cyber RT。我读源码时发现,Cyber RT解决了ROS的三个痛点:通信延迟高、调度不透明、缺少自动驾驶专用组件。

Component是Cyber RT的模块封装单位,分两种类型:

消息触发Component通过模板参数指定输入消息类型,收到数据才执行。比如modules/prediction/prediction_component.h定义的PredictionComponent继承自Component<PerceptionObstacles>,每当感知数据到达就触发Proc()

TimerComponent继承自cyber::TimerComponent,内部创建cyber::Timer实例,周期性调用Proc()。源码位于cyber/component/timer_component.h,调度基于TimingWheel实现O(1)复杂度。

Channel是数据通道,通过node->CreateReader<T>node->CreateWriter<T>建立发布订阅关系。Channel名就是消息的路由地址。

模块拓扑关系通过DAG文件定义,后缀是.dag,放在modules/目录/conf/下。Cyber启动时解析DAG,构建调度图。

共享内存零拷贝是Cyber RT的核心设计,也是和ROS拉开差距的关键:

进程内通信直接传指针,数据零拷贝。源码在cyber/transport/下,IntraTransmitter直接传递shared_ptr,不需要任何序列化反序列化。两个Component在同一个进程里,传一条PerceptionObstacles(含几十个障碍物的位置、速度、多边形轮廓)就是传一个指针,微秒级。

进程间通过共享内存块传递。Segment类管理一块共享内存,ShmTransmitter写入,ShmReceiver读取。Channel和共享内存块一一对应。这里仍然是零拷贝——写端把protobuf序列化后的字节流放进共享内存,读端拿到的就是同一块内存的引用,不需要内核态拷贝。相比ROS的TCP socket需要两次内核态拷贝(用户态→内核态→用户态),延迟降了一个量级。

跨主机通信用RTPS(基于eProsima Fast RTPS)。RtpsTransmitter序列化消息发布,RtpsReceiver接收后反序列化。这种场景下无法避免序列化,但Apollo的跨主机通信主要用于多车编队和云端接入,单车计算平台上绝大多数通信走的是进程内或进程间。

我对比了一下:ROS发布一条激光雷达点云(约100KB),TCP通道端到端延迟在1-3ms;Cyber RT进程内通信同一数据,延迟在0.1ms以内。100Hz的雷达数据,这个差距会被放大100倍。

Cyber RT通信机制图

调度器支持两种策略,配置文件在cyber/conf/scheduler_conf.pb.txt

classic调度器基于优先级队列,每个任务有优先级和协程组。高优先级任务先调度,同优先级按FIFO。适合模块间优先级关系清晰的场景——控制>规划>感知。

choreography调度器支持更精细的任务依赖编排,可以指定某个任务在特定CPU核上运行(CPU亲和性),还可以配置任务间的依赖关系。自动驾驶场景下,控制任务绑在独立的核上、不被其他任务抢占,这是硬实时要求的保障。

实际部署中,Apollo默认用choreography,把Planning和Control绑到独立核,保证10Hz的稳定输出。

为什么不用ROS?ROS的TCP/UDP通信有序列化开销,调度器是单一线程池,不支持组件级别的资源亲和性配置。自动驾驶场景下,感知10Hz、控制10Hz、雷达100Hz,延迟要求百毫秒级,ROS的通用设计不够用。

数据流全链路追踪

Apollo数据流全链路图

传感器驱动 → 感知模块

入口在modules/perception/onboard/component/detection_component.cc(LidarDetectionComponent)和对应的Camera、Radar组件。

输入channel包括/apollo/sensor/velodyne64(点云)、/apollo/sensor/camera/front_6mm(图像)、/apollo/sensor/radar/front(前向雷达)。传感器频率不同:Lidar 10Hz、Camera 30Hz、Radar 100Hz。

感知模块做异步融合,时间对齐各传感器数据后输出PerceptionObstacles(含位置、速度、分类)和TrafficLightDetection(红绿灯状态)。

融合策略值得一提:Lidar和Radar的频率差异很大(10Hz vs 100Hz),感知模块不是等所有传感器数据到齐才处理,而是用最新的传感器数据做"快照融合"。源码里有个SensorFrame类,负责把时间戳最近的一帧多传感器数据打包,交给后端的ObstacleDetectorTracker。这意味着一帧感知输出可能混入了50ms前的雷达数据和10ms前的相机数据,对下游的预测模块来说,这个时间差需要补偿。

输出channel是/apollo/perception/obstacles/apollo/perception/traffic_light

感知 → 预测模块

入口在modules/prediction/prediction_component.cc,这个组件是消息触发的:

class PredictionComponent : public Component<PerceptionObstacles>

输入PerceptionObstaclesLocalizationEstimate,输出PredictionObstacles——每个障碍物的多条未来轨迹,每条轨迹带概率。

预测模块内部有四个子组件:Container存储输入、Scenario分析场景类型、Evaluator评估轨迹概率、Predictor生成具体轨迹。源码在modules/prediction/下各子目录。

其中Evaluator是最有意思的部分。Apollo实现了多种评估器:CostEvaluator基于规则打分(跟车距离、车道偏移),MLPEvaluator用三层全连接网络预测轨迹概率,CruiseMLPEvaluator专门处理巡航场景。Evaluator的选择通过配置文件prediction_conf.pb.txt指定,可以按障碍物类型(行人、车辆、自行车)分配不同评估器。

Predictor这边也有多种策略:LaneSequencePredictor沿车道线预测、FreeMovePredictor对离线障碍物做匀速直线预测、JunctionPredictor专门处理路口场景。每个障碍物最终输出多条候选轨迹,每条带概率值,概率最高的那条作为下游规划的参考。

输出channel是/apollo/prediction

定位模块

入口在modules/localization/下的定位组件。RTK模式用TimerComponent定时触发(100ms周期),MSF(多传感器融合)模式是事件触发。

融合算法糅合GPS、IMU、LiDAR点云匹配,输出LocalizationEstimate——车辆位姿(xyz+航向角),精度厘米级。

输出channel是/apollo/localization/pose,被Prediction、Planning、Control、Perception四个模块订阅。

路由 → 规划模块

入口在modules/planning/planning_component/planning_component.cc。这是最复杂的模块之一。

输入channel包括:

  • /apollo/prediction(PredictionObstacles)
  • /apollo/localization/pose(LocalizationEstimate)
  • /apollo/canbus/chassis(Chassis,车辆状态)
  • /apollo/routing_response(RoutingResponse,全局路径)
  • /apollo/perception/traffic_light(TrafficLightDetection)

规划组件本身是TimerComponent,10Hz定时触发。PlanningComponent::Proc()每次被调用时,综合所有输入数据,调用PlanningBase::RunOnce()

Apollo支持多种Planner:EM Planner(基于DP+QP的路径速度分离优化)、Lattice Planner(横纵向一体化采样)、NaviPlanning(开放道路)。选择逻辑在modules/planning/planning_base.h中。

EM Planner的思路是先搜路径再优化速度。DP阶段在Frenet坐标系下采样出一条粗路径,QP阶段在粗路径周围建二次规划问题做精细优化。路径确定后再用同样的DP+QP流程优化速度剖面。路径和速度是解耦的,好处是降维,坏处是路径和速度的耦合约束(比如急弯必须减速)只能靠启发式规则补。

Lattice Planner不分路径和速度,直接在横纵向同时采样,生成一组候选轨迹,然后用代价函数(横向偏移、纵向加速度、Jerk等)选最优。每条轨迹是完整的时空曲线,天然满足耦合约束,但采样空间大,计算量也大。

实际部署中,EM Planner是默认选项,Lattice Planner作为备选。原因很简单:EM Planner的DP+QP框架成熟稳定,Lattice Planner在密集交通场景下采样效率不够。

EM Planner与Lattice Planner对比图

输出ADCTrajectoryplanning.proto定义),包含repeated TrajectoryPoint trajectory_point,代表未来5-8秒的规划轨迹。每条TrajectoryPoint含位置、速度、加速度、时间戳。

输出channel是/apollo/planning

规划 → 控制模块

入口在modules/control/control_component.cc,同样是TimerComponent 10Hz。

控制组件订阅三个channel:/apollo/planning(ADCTrajectory)、/apollo/localization/pose(LocalizationEstimate)、/apollo/canbus/chassis(Chassis)。

横向控制用LQR,基于车辆运动学模型,状态量是横向位置误差和航向角误差,控制量是前轮转角。Apollo早期版本用这个。LQR的好处是计算快(矩阵运算),坏处是运动学模型在高速大曲率下不够准。

纵向控制用PID双环:外环位置环(规划位置-实际位置→速度补偿),内环速度环(规划速度+速度补偿→加速度→油门/刹车)。双环PID参数整定是个体力活,Apollo在control_conf.pb.txt里针对不同速度区间配了不同的PID增益。

新版本引入MPC(模型预测控制),横纵向一体化,用MpcOsqp求解器(基于OSQP)求解二次规划问题。MPC的核心优势:它显式考虑了车辆动力学约束(最大方向盘转角、最大加速度),在每个控制周期内做有限时域优化,自然处理约束饱和。代价是计算量大,MPC单次求解在1-5ms,而PID+LQR的组合在0.1ms以内。好在10Hz的控制频率留了100ms的预算,5ms的MPC完全吃得下。

源码里三种控制器可以配置切换:lon_controller_typelat_controller_type独立配置。实际部署中,低速场景用PID+LQR(简单可靠),高速场景用MPC(约束处理更好)。

输出ControlCommandcontrol_command.proto定义),含steering_angle(方向盘转角)、throttle(油门)、brake(刹车)、gear_location(档位)。

输出channel是/apollo/control

控制 → Canbus → 车辆底盘

入口在modules/canbus/canbus_component.cc

class CanbusComponent final : public apollo::cyber::TimerComponent

订阅/apollo/control接收ControlCommand,解析成CAN报文发到车辆线控底盘。同时定时发布Chassis消息反馈车辆状态。

输出channel是/apollo/canbus/chassis

关键Channel和消息一览表

Channel
消息类型
发布方
订阅方
/apollo/sensor/velodyne64
PointCloud2
传感器驱动
感知
/apollo/sensor/radar/front
Radar
传感器驱动
感知
/apollo/perception/obstacles
PerceptionObstacles
感知
预测、规划
/apollo/perception/traffic_light
TrafficLightDetection
感知
规划
/apollo/prediction
PredictionObstacles
预测
规划
/apollo/localization/pose
LocalizationEstimate
定位
感知、预测、规划、控制
/apollo/routing_response
RoutingResponse
路由
规划
/apollo/canbus/chassis
Chassis
Canbus
感知、预测、规划、控制
/apollo/planning
ADCTrajectory
规划
控制
/apollo/control
ControlCommand
控制
Canbus

触发机制对比

TimerComponent用于周期性执行的模块:Planning(10Hz)、Control(10Hz)、Canbus(100Hz)、RTK定位(10Hz)。定时触发的好处是不依赖上游数据,任何一个模块延迟都不会卡住下游。

消息触发Component用于事件驱动的模块:Perception(传感器数据到达才处理)、Prediction(感知结果到达才处理)、MSF定位(多传感器事件触发)。好处是节省CPU,空闲时不用跑算法。

为什么Planning用Timer不用消息触发?因为Planning需要同时拿到定位、预测、底盘、路由、红绿灯五个来源的数据。如果用消息触发,任何一个来源延迟都会导致规划跳帧。Timer触发保证10Hz稳定输出,丢一帧数据也比卡住强。

Apollo vs ROS2:为什么自动驾驶需要自己的中间件

自动驾驶圈子里经常有人问:Apollo为什么不直接用ROS2?ROS2已经解决了ROS1的大部分问题——支持DDS通信、有了共享内存选项、QoS可配置。但读完Cyber RT源码,我发现差距还是不小。

通信延迟:ROS2默认走DDS(Data Distribution Service),即使同一进程内的两个节点,消息也要经过序列化→DDS栈→反序列化的完整路径。Cyber RT进程内直接传shared_ptr,跳过所有序列化开销。对于100Hz的点云数据,前者延迟在亚毫秒级,后者在微秒级,差一个数量级。

调度可控性:ROS2的执行模型是Executor,用户提供回调函数,Executor负责调用。但Executor本身不感知任务优先级,也不支持CPU亲和性绑定。Cyber RT的choreography调度器可以把Planning和Control绑到独立CPU核上,保证它们不被其他任务抢占。自动驾驶场景下,控制模块的10Hz输出不能因为感知模块突然算了一帧重的就抖动。

确定性延迟:ROS2的DDS层引入了额外的调度不确定性——消息从发布到回调执行,中间经过DDS线程池、Executor队列,延迟抖动在毫秒级。Cyber RT的协程调度路径短:数据到达→唤醒协程→执行Proc(),中间没有线程池队列。对于100ms控制周期的自动驾驶系统,每1ms的抖动都是安全隐患。

消息兼容性:ROS2用.msg/.srv定义消息,Apollo用protobuf。protobuf的优势是前后向兼容——加字段不破坏旧消息解析,这对车载系统的OTA升级至关重要。ROS2的.msg虽然也支持可选字段,但生态里很少有工具做兼容性校验。

多进程部署:ROS2的节点天然是独立进程,通过DDS通信。Cyber RT支持在同一个进程里加载多个Component(通过DAG文件配置),进程内零拷贝;也支持跨进程共享内存通信。自动驾驶的计算平台通常是一块工控机或域控制器,进程内通信是主流场景,Cyber RT的设计更贴合。

不是ROS2不好,而是它的通用性设计在自动驾驶场景下不够极致。ROS2追求的是通用机器人中间件,从工业机械臂到服务机器人都要覆盖;Cyber RT只服务自动驾驶一个场景,可以做更激进的优化。

Cyber RT与ROS2架构对比图

结尾

读完了这条数据流,对Apollo的骨架就有了基本认知。每个模块是独立的进程/线程,通过Channel交换protobuf消息,Cyber RT负责调度和通信。

接下来每深入一个模块,都是在骨架上长肉。比如Planning内部怎么选场景、怎么生成参考线、怎么在Frenet坐标系下优化轨迹——这些是下一篇的事。


基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-12 08:12:26 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/739736.html
  2. 运行时间 : 0.222026s [ 吞吐率:4.50req/s ] 内存消耗:4,674.10kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=ced4180b725d51b5d652fbae47fc15c1
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001122s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001643s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000704s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000705s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001450s ]
  6. SELECT * FROM `set` [ RunTime:0.000638s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001656s ]
  8. SELECT * FROM `article` WHERE `id` = 739736 LIMIT 1 [ RunTime:0.001872s ]
  9. UPDATE `article` SET `lasttime` = 1781223146 WHERE `id` = 739736 [ RunTime:0.004282s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000812s ]
  11. SELECT * FROM `article` WHERE `id` < 739736 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001294s ]
  12. SELECT * FROM `article` WHERE `id` > 739736 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001174s ]
  13. SELECT * FROM `article` WHERE `id` < 739736 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002058s ]
  14. SELECT * FROM `article` WHERE `id` < 739736 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001917s ]
  15. SELECT * FROM `article` WHERE `id` < 739736 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004318s ]
0.228145s