乐于分享
好东西不私藏

OpenCode 源码-Server 网络层与路由

OpenCode 源码-Server 网络层与路由

OpenCode 源码解析

第 4 讲:Server 网络层与路由

基于 dev 分支源码 · 2026-07-10

📖 开篇导读

第 1 讲俯瞰了 Monorepo 全景,第 2 讲拆解了 CLI 入口,第 3 讲深入了 Session 会话核心。今天转向 Server 网络层——OpenCode 面向外部世界的 HTTP API 门面。Server 层横跨 packages/server/(28 个文件,1682 行)和 packages/protocol/(22 个文件,1581 行),总计约 3263 行源码。它基于 Effect 的 HttpApiBuilder 构建了完整的 RESTful API,包含 20 个 Handler 组、3 层中间件和完整的认证/CORS 体系。

一、Server 的两包分工

OpenCode 的网络层分为两个包:Protocol 定义 API 契约,Server 实现路由与处理逻辑。这种分离让 API 规范可以被 CLI、TUI、Desktop 等客户端独立引用。

packages/protocol/

API 契约层:Endpoint 定义、Schema 校验、错误类型、中间件声明

⬇️ 被引用

packages/server/

路由实现层:Handler 逻辑、中间件实例化、认证、CORS、WebSocket

⬇️ 依赖

packages/core/

业务服务层:SessionV2、Permission、Pty、Event 等 Effect Service

二、路由装配:routes.ts 的七层依赖注入

packages/server/src/routes.ts(68 行)是整个 Server 的装配中心。它通过 Effect 的 Layer 体系将 7 层依赖从底到顶堆叠起来:

function makeRoutes(auth) {
  const serviceLayer = AppNodeBuilder.build(
    applicationServices,
    [[SessionExecution.node, SessionExecutionLocal.node]]
  )

  return HttpApiBuilder.layer(Api, { openapiPath: "/openapi.json" })
    .pipe(
      Layer.provide(handlers),             // ① Handler 组
      Layer.provide(sessionLocationLayer), // ② Session 级 Location
      Layer.provide(locationLayer),        // ③ 全局 Location
      Layer.provide(authorizationLayer),   // ④ 认证中间件
      Layer.provide(schemaErrorLayer),     // ⑤ Schema 校验
      Layer.provide(auth),                 // ⑥ 认证配置
      Layer.provide(serviceLayer),         // ⑦ 业务服务
    )
}

这 7 层从下到上的依赖关系非常清晰:最底层的 serviceLayer 提供 Database、SessionV2、EventV2 等 10 个核心服务;往上依次是认证配置、Schema 校验、授权中间件、Location 解析,最顶层是 20 个 Handler 组。这样的设计让每个 Handler 只需要声明自己依赖的 Service,不需要关心服务如何创建。

三、Protocol 层:API 契约的定义方式

packages/protocol/src/api.ts(86 行)是 API 契约的装配入口。它使用 Effect 的 HttpApi.make("server") 将 18 个 Group 组合成一个完整的 API:

HttpApi.make("server")
  .add(HealthGroup)
  .add(LocationGroup.middleware(locationMiddleware))
  .add(AgentGroup.middleware(locationMiddleware))
  .add(makeSessionGroup(sessionLocationMiddleware))
  .add(MessageGroup.middleware(sessionLocationMiddleware))
  .add(ModelGroup.middleware(locationMiddleware))
  // ... 更多 Group
  .middleware(Authorization)
  .middleware(SchemaErrorMiddleware)

注意 .middleware()` 的两种用法:

1. Group.middleware(...)——Group 级别的中间件,只对该 Group 生效(如 Location、SessionLocation)

2. Api.middleware(...)——全局中间件,对所有 Endpoint 生效(如 Authorization、SchemaError)

四、20 个 Handler 组全景

packages/server/src/handlers.ts(40 行)通过 Layer.mergeAll 合并了 20 个 Handler,每个 Handler 对应一个业务领域:

Handler 文件 核心端点 行数
HealthHandler health.ts GET /health 7
SessionHandler session.ts session.list/create/prompt/compact/wait/interrupt 等 385
MessageHandler message.ts session.messages(游标分页) 81
PtyHandler pty.ts pty.create/connect(WebSocket) 223
EventHandler event.ts event.subscribe(SSE) 52
PermissionHandler permission.ts permission.ask/reply/list 98
QuestionHandler question.ts question.reply/reject 62
IntegrationHandler integration.ts integration.connect.key/oauth 104
FileSystemHandler fs.ts fs.read/list/find 39
其他 Handler model/agent/skill/command/credential/reference/location/project-copy 各 8-22 行 ~131

五、SessionHandler:最大的 Handler

session.ts(385 行)是 Server 中最大的 Handler 文件,暴露了 16 个端点。它的模式非常统一——每个端点通过 Effect.gen 获取 SessionV2.Service,然后调用对应方法,最后用 Effect.catchTag 将 Core 层的错误映射为 Protocol 层的 HTTP 错误:

.handle("session.prompt", Effect.fn(function* (ctx) {
  return {
    data: yield* session.prompt({
      sessionID: ctx.params.sessionID,
      prompt: ctx.payload.prompt,
      delivery: ctx.payload.delivery,
      resume: ctx.payload.resume,
    }).pipe(
      Effect.catchTag("Session.NotFoundError", (error) =>
        new SessionNotFoundError({
          sessionID: error.sessionID,
          message: `Session not found: ${error.sessionID}`,
        }),
      ),
      Effect.catchTag("Session.PromptConflictError", (error) =>
        new ConflictError({
          message: `Prompt message ID conflicts...`,
          resource: error.messageID,
        }),
      ),
    ),
  }
}))

这种模式在所有 Handler 中保持一致——Core 层抛出语义化错误标签(如 Session.NotFoundError),Server 层将其转换为带 HTTP 状态码的 Protocol 错误(如 SessionNotFoundError 对应 404)。

六、三个核心中间件

Server 层实现了三个关键中间件,分别解决认证、位置解析和 Schema 校验。

6.1 Authorization 中间件

middleware/authorization.ts(58 行)支持两种认证方式:

1. HTTP Basic Auth——从 Authorization 请求头解析 Base64 编码的用户名/密码

2. URL Token——从 auth_token 查询参数解析(用于 WebSocket 等无法携带自定义 Header 的场景)

认证配置来自 auth.ts(63 行),支持环境变量 OPENCODE_SERVER_PASSWORDOPENCODE_SERVER_USERNAME。如果未设置密码,认证中间件退化为透传(所有请求放行)。

function credentialFromRequest(request) {
  const url = new URL(request.url, "http://localhost")
  const token = url.searchParams.get("auth_token")
  if (token) return decodeCredential(token)
  const match = /^Basic\s+(.+)$/i.exec(request.headers.authorization ?? "")
  if (match) return decodeCredential(match[1])
  return Effect.succeed(emptyCredential())
}

6.2 Location 中间件

location.ts(60 行)实现了请求级别的 Location 解析。它从查询参数或请求头中提取 directoryworkspaceID,然后通过 LocationServiceMap 获取对应的工作空间服务:

function ref(request) {
  const query = new URL(request.url, "http://localhost").searchParams
  const workspaceID = query.get("location[workspace]")
    || request.headers["x-opencode-workspace"]
  const directory = query.get("location[directory]")
    || request.headers["x-opencode-directory"]
    || process.cwd()
  return Location.Ref.make({
    directory: AbsolutePath.make(directory),
    workspaceID: workspaceID ? WorkspaceV2.ID.make(workspaceID) : undefined,
  })
}

SessionLocationMiddlewaremiddleware/session-location.ts,67 行)更进一步——它从数据库查询 Session 的存储位置,确保后续操作在正确的上下文中执行。这对于多项目、多工作空间场景至关重要。

6.3 Schema Error 中间件

middleware/schema-error.ts(20 行)拦截所有 Schema 校验失败,将原始错误截断到 1024 字符后转换为 InvalidRequestError(HTTP 400)。这防止了超长校验信息泄露内部实现细节。

七、SSE 事件推送与 WebSocket PTY

Server 层支持两种实时通信通道:

1. SSE(Server-Sent Events)——EventHandler(52 行)通过 event.subscribe 端点推送实时事件。它使用 Effect 的 Sse.encode() 编码事件,配合 15 秒心跳保活,容量为 256 的有界流防止内存泄漏:

const output = Stream.unwrap(Effect.gen(function* () {
  const live = yield* EventV2.allBounded(events, 256)
  return Stream.make(connected).pipe(Stream.concat(live))
}))
  .pipe(Stream.map(eventData), Stream.pipeThroughChannel(Sse.encode()))

const heartbeat = Stream.tick("15 seconds")
  .pipe(Stream.map(() => ": heartbeat\n\n"))

return HttpServerResponse.stream(
  output.pipe(Stream.merge(heartbeat), Stream.encodeText),
  { contentType: "text/event-stream" })

2. WebSocket PTY——PtyHandler(223 行)是最复杂的 Handler,实现了完整的终端会话管理。它使用 Ticket 机制防止跨站伪造:pty.connectToken 签发一次性票据,pty.connect 消费票据后升级 WebSocket 连接。数据流通过无界队列 Queue.unbounded 保证回放、实时输出和关闭帧的顺序一致性。

八、CORS 安全策略

cors.ts(34 行)定义了严格的跨域策略,允许的 Origin 包括:

🔹 localhost:127.0.0.1:——本地开发

🔹 oc://renderer——OpenCode 桌面应用内部渲染进程

🔹 tauri://localhost——Tauri 桌面运行时

🔹 *.opencode.ai——官方云服务域名

🔹 自定义 CORS 白名单(通过 CorsConfig 注入)

九、错误体系

packages/protocol/src/errors.ts(111 行)定义了 11 种标准错误类型,全部继承自 Effect Schema 的 TaggedErrorClass,每种错误映射到对应的 HTTP 状态码:

错误类型 HTTP 状态码 用途
InvalidRequestError 400 Schema 校验失败、参数错误
UnauthorizedError 401 认证失败
ForbiddenError 403 CORS 拒绝、PTY Ticket 无效
SessionNotFoundError 404 Session 不存在
ConflictError 409 Prompt 消息 ID 冲突
ServiceUnavailableError 503 操作不可用(如 Session 未就绪)
UnknownError 500 未知服务器错误(附带 ref 追踪)

十、关键设计总结

🔹 Protocol/Server 分离——API 契约与实现解耦,客户端可独立引用 Protocol 包生成类型安全的请求代码
🔹 Effect Layer 依赖注入——7 层依赖从下到上堆叠,Handler 只需声明依赖、不关心创建逻辑
🔹 错误标签映射——Core 层抛出语义化错误标签,Server 层统一映射为 HTTP 状态码
🔹 Location 中间件——请求级工作空间解析,支持多项目多工作空间隔离
🔹 双通道实时通信——SSE 推送事件 + WebSocket 承载 PTY 终端
🔹 OpenAPI 自动文档——/openapi.json 端点自动生成 API 文档

📋 系列导航

← 第 3 讲:Session 会话核心

→ 第 5 讲:Plugin 插件系统

关注公众号获取更多技术干货

源码地址:https://github.com/opencode-ai/opencode

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-23 20:16:14 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/852889.html
  2. 运行时间 : 0.120709s [ 吞吐率:8.28req/s ] 内存消耗:4,539.57kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=098f710833ca8ffea3445e45af759890
  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.000647s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000719s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.004504s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.004571s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000626s ]
  6. SELECT * FROM `set` [ RunTime:0.001368s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000668s ]
  8. SELECT * FROM `article` WHERE `id` = 852889 LIMIT 1 [ RunTime:0.001163s ]
  9. UPDATE `article` SET `lasttime` = 1784808974 WHERE `id` = 852889 [ RunTime:0.011576s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.003099s ]
  11. SELECT * FROM `article` WHERE `id` < 852889 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000632s ]
  12. SELECT * FROM `article` WHERE `id` > 852889 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000440s ]
  13. SELECT * FROM `article` WHERE `id` < 852889 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001238s ]
  14. SELECT * FROM `article` WHERE `id` < 852889 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.007039s ]
  15. SELECT * FROM `article` WHERE `id` < 852889 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002770s ]
0.123268s