乐于分享
好东西不私藏

78K+ Star!OpenHands源码解析(二):它不是在新建一条记录

78K+ Star!OpenHands源码解析(二):它不是在新建一条记录

第一篇讲的是大地图:OpenHands 正在从“单体 AI 程序员”变成 Agent Canvas 控制中心。

第二篇就从一件最普通、也最容易被低估的事开始:发起一次对话。

在很多系统里,“创建对话”就是往数据库插一行记录。但在 OpenHands 里,它不是一行 DB 记录,而是一条启动流水线:

  • 找到或启动沙箱。
  • 校验 agent-server 版本。
  • 计算工作目录。
  • clone 或初始化仓库。
  • 抓初始 workspace 快照。
  • 跑 setup script。
  • 装 git hooks。
  • 加载 skills。
  • 构造请求,POST 到 agent-server。
  • 写入 conversation metadata。
  • 补默认 callback processor。
  • 处理启动过程中积压的 pending messages。

这就是为什么 OpenHands 没有把“创建对话”设计成一次同步 API,而是设计成一个可持久化、可流式返回、可失败落盘的 start task。

OpenHands 对话启动状态机

1. 先看三层模型

对话生命周期的第一层,是 AppConversationInfo

它只存“信息”,不存运行时状态。字段包括 conversation id、sandbox id、仓库、分支、git provider、标题、LLM model、agent kind、父子 conversation、tags、created_at、updated_at 等。

第二层,是 AppConversation

它继承 AppConversationInfo,再补上运行时字段:

  • sandbox_status
  • execution_status
  • conversation_url
  • session_api_key

这说明 OpenHands 把“可长期保存的元数据”和“当前运行态”分开了。前者属于 app conversation,后者要从 sandbox / agent-server 运行状态里拼出来。

第三层,是 AppConversationStartTask

它不是 conversation 本身,而是“启动过程”。模型注释说得很清楚:启动 app conversation 可能很慢,因为可能涉及启动沙箱,所以要 kick off background task。

它的字段也很像一个任务表:

  • status
  • detail
  • app_conversation_id
  • sandbox_id
  • agent_server_url
  • request

也就是说,一次对话还没出生前,OpenHands 已经先给它准备了一个“出生记录”。

2. 为什么启动是长任务

核心入口是 POST /app-conversations

router 做了一个很有意思的动作:它调用 service 的 async generator,先拿第一个 task 返回给客户端,然后用 asyncio.create_task 在后台继续消费剩下的状态更新。

关键结构是:

async_iter = app_conversation_service.start_app_conversation(start_request)result = await anext(async_iter)asyncio.create_task(_consume_remaining(async_iter, db_session, httpx_client))return result

这不是简单的异步包装。它表达的是一个产品语义:

用户点“开始”后,前端可以立刻拿到一个 start task id;后续启动过程继续跑,task 状态持续落库。

同时,OpenHands 还提供了 /stream-start。这个接口直接用 StreamingResponse 包住同一条启动 generator,把 task 更新作为 JSON list 一段段吐出来。

所以它同时支持两种体验:

  • 普通 start:先返回第一个 task,后台继续跑。
  • stream-start:连接保持打开,持续看到启动进度。

底层不是两套逻辑,而是同一个 service generator。

3. 8 个正常阶段,加一个 ERROR 兜底

AppConversationStartTaskStatus 里有 9 个枚举值:

WORKINGWAITING_FOR_SANDBOXPREPARING_REPOSITORYRUNNING_SETUP_SCRIPTSETTING_UP_GIT_HOOKSSETTING_UP_SKILLSSTARTING_CONVERSATIONREADYERROR

更准确地说,这是 8 个正常阶段,加一个 ERROR 兜底。

WORKING 是任务刚创建出来的初始态。

WAITING_FOR_SANDBOX 发生在找 sandbox、启动 sandbox、恢复 paused sandbox、等待 sandbox running 的阶段。

后面四个 setup 阶段集中在一条 pipeline 里:

  • PREPARING_REPOSITORY
    :clone 或初始化 git repo。
  • RUNNING_SETUP_SCRIPT
    :跑项目里的 setup script。
  • SETTING_UP_GIT_HOOKS
    :安装 git hooks。
  • SETTING_UP_SKILLS
    :通过 agent-server 加载并合并 skills。

这里还有一个细节:在 setup script 修改 workspace 之前,OpenHands 会尝试抓 initial workspace snapshot。它是 best-effort,不应该阻塞启动。

STARTING_CONVERSATION 是跨边界的那一步。service 构造完 StartConversationRequest 后,带 X-Session-API-Key POST 到:

{agent_server_url}/api/conversations

READY 发生在 agent-server 返回 conversation info 之后。OpenHands 写入自己的 AppConversationInfo,保证默认 SetTitleCallbackProcessor 存在,再把 task 填上 app_conversation_id

ERROR 则是最后的兜底。任何异常都会被捕获,错误详情会先做 secret / API key 脱敏,再写进 task detail。

这就是这张状态机的重点:启动过程不是“成功/失败”二值,而是每一步都能被观察、被落库、被恢复上下文。

4. 启动真正做了什么

把 service 主流程串起来看,OpenHands 在一次启动里做了十几件事。

第一,处理 parent conversation 和 suggested task。它允许子 conversation 继承父 conversation 的部分配置。

第二,启动或复用 sandbox。没有 sandbox id 时,先找当前用户 running sandbox;找不到再创建新 sandbox。已有 sandbox 处于 PAUSED 时会 resume。

第三,校验 agent-server 版本。自定义 sandbox image 可能带着不兼容的 SDK,所以 OpenHands 会先读 /server_info,失败时给更明确的错误提示。

第四,把用户的 LLM profiles seed 到 sandbox。SaaS 场景下 profiles 在 app-server,不在 sandbox 文件系统;会话创建前同步过去,agent 内置的 switch_llm 工具才能用。

第五,计算 working dir。这个路径后面会被写进 tags,删除归档时直接使用,避免配置变化导致归档路径漂移。

第六,跑 setup pipeline。这里包括 clone/init、initial archive、setup.sh、git hooks、skills。

第七,构造 agent-server start request。这里会把 LLM、secrets、MCP、skills、git provider、workspace 等能力拼成一次启动请求。

第八,POST 到 agent-server。请求头带 X-Session-API-Key

第九,保存 app conversation metadata。agent-server 返回 ConversationInfo 后,OpenHands 创建自己的 AppConversationInfo,记录 sandbox_id、user_id、llm_model、agent_kind、仓库、分支、provider、trigger、parent 等信息。

第十,注册 callback processor。即使请求里没有传 processors,也会默认补一个 SetTitleCallbackProcessor

第十一,处理 pending messages。如果用户在 sandbox / conversation 还没完全 ready 时已经发了消息,这些消息会在 READY 后被送进 agent-server。

这一串流程解释了为什么“启动即长任务”:它不是创建一条 conversation,而是在为一个外部执行环境准备完整上下文。

5. 删除不是 delete sandbox

启动像出生,删除也不是简单死亡。

OpenHands 的删除入口是 DELETE /app-conversations/{conversation_id}。router 先校验 conversation id,查 conversation info,拿到 sandbox_id,再统计有多少 conversation 共享这个 sandbox。

然后它调用 service 删除 conversation:

  • 先删 sub-conversations,尽量保持引用完整性。
  • 如果 sandbox 没有被共享,就调用 agent-server 删除 conversation。
  • 即使 agent-server delete 失败,也继续清 DB metadata。
  • 最后删除 app conversation info 和关联 start tasks。

router 在 DB commit 之后,才把 sandbox 收尾交给后台任务 _finalize_sandbox_delete

OpenHands 对话删除与归档收尾

这个 finalizer 的顺序很讲究:

  1. 先 archive_conversation_workspace
  2. 如果归档 REQUIRED 且失败,不删 sandbox,留给 idle reap 兜底。
  3. 如果归档成功或非 REQUIRED,再重新按 sandbox_id 统计 conversation 数量。
  4. 只有计数为 0,才 delete_sandbox

SandboxService 的抽象也把边界写死了:delete_sandbox 是 sandbox-scoped,只负责 stop/delete runtime;workspace capture 是另一个 conversation-scoped 步骤,要在 sandbox 被销毁前完成。

远端沙箱实现里同样强调:archive_conversation_workspace 是 app-server 显式删除路径下唯一的 capture path;按 conversation key 归档,避免 grouped sandbox 里的兄弟 conversation 相互覆盖。

归档实现还有一个工程细节:从 agent-server 的 GET /api/file/archive 拉 workspace 时,会 stream 到 tempfile,再上传到 object store,避免大 workspace 在 app-server 内存里整包展开。

所以删除链路的真实语义不是“把 sandbox 停掉”。它是:

先删 conversation 级数据,再在后台保护 workspace,最后在确认没有兄弟 conversation 引用时,才考虑删除 sandbox。

6. 亮点和隐患

亮点一:生命周期建模很完整。

OpenHands 没有把 conversation 当成一个表,而是拆成 info、runtime view、start task 三层。启动过程可持久化,启动进度可流式返回,失败原因会脱敏落盘。这个设计很适合“创建成本高、依赖外部运行时、可能部分失败”的系统。

亮点二:归档优先级高于销毁。

删除时,service 负责 conversation 数据清理;router finalizer 负责 workspace capture 和 sandbox teardown。归档 REQUIRED 失败时宁愿保留 sandbox,也不贸然删 runtime。这是很强的 durability 取舍。

亮点三:同一个 generator 同时服务普通 start 和 streaming start。

普通 start 先返回第一个 task,后台继续消费;stream-start 则把每个 task update 直接吐给客户端。状态源是一套,减少了两条启动链路分叉的风险。

隐患也很明显。

第一,live_status_app_conversation_service.py 已经有 2614 行。启动、恢复、删除、请求构造、密钥、MCP、skills、pending messages 都挤在同一个 service 里。它是这条链路的心脏,也已经有 God Service 的味道。

第二,启动链路跨了 router、service、sandbox、agent-server、workspace archive、event callback 多个边界。每一步都有必要,但错误定位会变难。好在 start task detail 做了脱敏落盘,否则排查体验会很差。

第三,删除收尾分在 service 和 router。service 删除 conversation 数据,router finalizer 归档并删 sandbox。这个边界有现实理由,因为 finalizer 要在响应后继续拿着 db/httpx 资源跑;但长期看,这种“业务删除在 service,资源收尾在 router”的分工需要很强的注释和测试保护。

结语:对话是一条生命周期,不是一条记录

读完这一段,再回看第一篇的控制面 / 数据面分离,就能解释很多设计选择。

OpenHands 的 app_server 不是把一个 Python 函数叫起来跑 agent。它要先准备沙箱,准备 workspace,准备技能,准备密钥边界,准备 agent-server 请求,再把这次运行交给数据面。

所以一次 conversation 的“生”,是一个长任务。

一次 conversation 的“死”,也不是 delete sandbox,而是 conversation 级数据清理、workspace 归档、引用计数、sandbox teardown 的组合动作。

问题继续往下走:

同一个会话启动后,docker、process、remote 三种沙箱后端,到底如何承担这个数据面?

相关阅读

(一)78K+ Star!OpenHands源码解析(一):它正在拆掉自己

源码参考:GitHub: https://github.com/OpenHands/OpenHands

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-23 04:30:33 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/828368.html
  2. 运行时间 : 0.304607s [ 吞吐率:3.28req/s ] 内存消耗:4,744.84kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a046d226744517597ebcef22e25f76fe
  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.000939s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001048s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.006807s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000310s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000514s ]
  6. SELECT * FROM `set` [ RunTime:0.006488s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000675s ]
  8. SELECT * FROM `article` WHERE `id` = 828368 LIMIT 1 [ RunTime:0.030387s ]
  9. UPDATE `article` SET `lasttime` = 1784752233 WHERE `id` = 828368 [ RunTime:0.038657s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000418s ]
  11. SELECT * FROM `article` WHERE `id` < 828368 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000664s ]
  12. SELECT * FROM `article` WHERE `id` > 828368 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.005676s ]
  13. SELECT * FROM `article` WHERE `id` < 828368 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.010542s ]
  14. SELECT * FROM `article` WHERE `id` < 828368 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.028861s ]
  15. SELECT * FROM `article` WHERE `id` < 828368 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.013250s ]
0.306325s