乐于分享
好东西不私藏

读 RustDesk 源码:远程桌面如何真正连起来

读 RustDesk 源码:远程桌面如何真正连起来

很多人第一次看 RustDesk,会把它理解成“Flutter UI 加一个远程屏幕库”:控制端连上对方,主机端把画面编码推过来,再把鼠标键盘事件传回去。

这个理解能解释表面体验,但解释不了源码里真正复杂的部分。RustDesk 难的不是“显示一张远端屏幕”,而是:两台机器经常都在 NAT 后面,控制端要先找到 host;直连、UDP 打洞、IPv6、同内网地址和 relay fallback 要一起竞争;连接进来以后,还要把键盘、剪贴板、文件、音频、摄像头、terminal、隐私模式这些能力拆成独立权限。

这篇不写泛泛的“远程桌面架构”。我们只沿着源码看三件事:RustDesk 怎么让两端连起来,host 端怎么按需暴露能力,以及危险操作为什么不是登录成功就全部放开。

源码基线:

  • • 本地源码目录:sources/rustdesk
  • • 分支:master
  • • Commit:fa369365a576cc3a86e4643ba7224f65b48bdf9c
  • • Commit time:2026-05-30T15:44:04+08:00
  • • Commit subject:Update Portuguese translations for clarity (#15135)
  • libs/hbb_common submodule:2e9f641101c6bfbd1f4ca42a249bef7c14e52f5b

说明:本文由 AI 辅助完成,可能存在遗漏、理解偏差或版本差异。关键实现请以本文固定的 commit、本地源码和官方文档为准。

先把源码地图摆出来

RustDesk 的源码可以先分成四块看。

第一块是入口层:src/main.rssrc/core_main.rs。它们处理 GUI、CLI、server mode、connect mode 等启动路径。入口本身不厚,核心是把不同模式导入同一套 runtime。

第二块是 host runtime:src/server.rssrc/rendezvous_mediator.rssrc/server/connection.rs。这里负责启动本机服务、向 rendezvous server 注册、响应打洞/relay 请求、处理登录和权限。

第三块是控制端:src/client.rssrc/client/io_loop.rs。控制端会发 PunchHoleRequest,同时尝试直连、UDP KCP、IPv6、本地地址或 relay;连接建立后,peer stream 和 UI channel 在 io_loop 里汇合。

第四块是共享协议和平台能力:libs/hbb_common/protos/rendezvous.protolibs/hbb_common/protos/message.proto 定义连接和会话消息;libs/scrap 负责采集,libs/enigo 负责输入注入,libs/clipboard 负责剪贴板。

一个容易踩的坑是只看 src/。RustDesk 的协议、配置和部分公共类型在 libs/hbb_common 里,而且它是 submodule。没有初始化这块,很多连接字段和权限字段会看不完整。

启动:UI 不是全部,host service 才是常驻能力

非 mobile、非 CLI、非 Flutter feature 的入口在 src/main.rsmaincore_main::core_main(),如果返回 Some(args) 再启动旧 Sciter UI。

真正的分流在 src/core_main.rs。它会解析 --connect--file-transfer--view-camera--port-forward--terminal--server--no-server 等模式。普通启动时,如果没有明确连接参数,会在后台启动 server;显式 --server 则进入 start_server(true, false)

src/server.rs 里的 start_server 会做几件 host 侧基础工作:设置 server running 状态,启动 IPC,处理输入按键 timeout,按平台初始化输入/配置同步/Windows broker 清理,然后进入 RendezvousMediator::start_all().await

所以 RustDesk 更准确的形态是“客户端 UI + 本机常驻 host runtime”的混合体。用户看到的是窗口,远程控制依赖的是本机 server runtime 是否能注册、被发现、接收连接并暴露服务。

连接建立:不是一条路,而是一组候选路径竞速

控制端的主入口在 src/client.rs

Client::start 包装 _start_start 会先处理 incoming-only、直连 IP/domain、rendezvous server 选择、IPv6 测试、UDP NAT 准备等前置条件。有 UDP 时,它会竞争两条 _start_inner 路径,而不是只走一个固定分支。

_start_inner 会连接 rendezvous server,构造 PunchHoleRequest。这个消息里不只是对方 id,还包括 conn_typetokennat_typeudp_portforce_relay、IPv6 socket 地址等字段。换句话说,RustDesk 发起连接时已经把“我想用什么模式、我这边网络条件如何、是否强制 relay”一起告诉了协调方。

host 端的响应在 src/rendezvous_mediator.rshandle_resp 收到 PunchHole 会 spawn handle_punch_hole,收到 RequestRelay 会 spawn handle_request_relay,收到 FetchLocalAddr 会处理同内网地址。handle_punch_hole 再根据 NAT 类型、same NAT、proxy、force relay、是否禁用 TCP/UDP 来决定直连、UDP hole punching、local addr 还是 relay。

底层辅助逻辑在 src/common.rs。例如 test_nat_type_ 会通过两个 rendezvous 端口比较映射端口,判断 asymmetric 或 symmetric;punch_udp 会以 20ms 起步、最大 200ms 的间隔反复发空包,最长 20 秒;secure_tcp_impl 会用 rendezvous server public key 验证 key exchange,再设置 stream symmetric key。

这就是 RustDesk 连接建立最重要的事实:它不是“先连服务器,再转发屏幕”。rendezvous server 负责协调,controller 和 host 会围绕直连、打洞、本地地址和 relay fallback 做路径选择;最后无论走哪条路,都会进入后面的安全握手和登录流程。

Relay fallback:路径变了,安全边界没变

relay fallback 容易被误解成“直连失败后找个代理转一下”。RustDesk 的源码里,它更像双端会合。

host 收到 RequestRelay 后,handle_request_relay 会去重,然后调用 create_relay。host 先连接 relay server,把 RelayResponse 发回 rendezvous server,再调用 server::create_relay_connection。client 侧则通过 rendezvous server 拿到 RelayResponse,再去 relay server 上用同一个 uuid 会合。

关键点在于:relay 只是 transport 路径。进入 host 后,仍然会走 Connection::start、登录、权限判断和 service subscription。不能把 relay 理解成绕过 host 安全边界的通道。

Host service:授权以后才按需订阅能力

Server 的结构在 src/server.rs:它持有 connectionsservicesid_countnew() 默认注册 audio、display、clipboard、cursor/position/window focus、printer 等服务;terminal 是 per connection,不是全局 service。

服务抽象在 src/server/service.rsService trait 只暴露 name、subscribe/unsubscribe、join、option、ok 等通用能力。更关键的是 ServiceTmpl::run:只有 has_subscribes() 时才进入 inner loop;没有订阅时按 hibernate timeout 休眠。

这就解释了 host 端为什么不是一个连接对象里跑所有功能。连接通过认证以后,src/server/connection.rs 会按模式和权限决定订阅哪些服务:

  • • 文件传输连接走文件相关分支。
  • • terminal 连接初始化 per-connection terminal service。
  • • 摄像头模式会增加 camera video service。
  • • 普通远控会根据 keyboard、cursor、clipboard、file clipboard、audio 等权限构造 noperms,再调用 s.add_connection(...)

运行中也能调整。update_options 会根据 OptionMessage 动态改图像质量、FPS、supported decoding、音频、剪贴板、cursor/window focus 等订阅。切换 display 时,也会动态增加 video service 并订阅新的 service。

所以 RustDesk 的 host 模型可以概括成一句话:连接对象不直接拥有全部能力,它通过权限和选项去订阅 host services。

视频链路:capture、encode、send、ack 是闭环

视频服务在 src/server/video_service.rs

new(source, idx) 会为 monitor 或 camera 创建 GenericService,注册 frame notifier 并运行 service loop。capturer 创建时会优先处理 Windows privacy mode;Windows 可走 portable_service DXGI/GDI,非 Windows 走 scrap::Capturer。monitor capturer 还会处理 Wayland、display 列表、MIT-SHM、privacy mode 等平台差异。

run 初始化 capturer、读取 VIDEO_QOS、设置 encoder。如果创建 encoder 失败,会 fallback 到 VP9。主循环捕获 frame,转成 encoder 需要的 YUV,再编码并发送。每帧发送后,VideoFrameController 会等 client ack,最多 3 秒;client ack 会反过来影响 QoS。

控制端在 src/client/io_loop.rs 收到 VideoFrame 后,第一帧会关闭连接成功提示、适配尺寸、发送隐私模式/虚拟显示 toggle,然后按 display 启动 video thread。关键帧直接发送,非关键帧进 queue。音频、剪贴板、文件、权限变化也在同一个 io loop 里被分发。

这块的工程价值不是“用了哪个编码器”,而是 RustDesk 把采集、编码、发送、确认、QoS、display switch、privacy mode 放进一个能订阅、能重启、能被连接状态影响的 service loop。

权限:远程控制不是登录成功就全放开

src/server/connection.rs 是权限边界的核心文件。

Connection::start 初始化时,会构造 challenge hash、CM channel、stream channel、video channel、input channel 等,同时把 keyboard、clipboard、audio、file、restart、recording、block_input、privacy_mode 这些能力通过 Self::permission(..., &control_permissions) 初始化。如果某项权限关闭,会立即发送 PermissionInfo 给 client。

权限来源不是一个地方。is_permission_enabled_locally 会先看 access-mode:full 直接允许,view 直接禁用;否则读取本地 option。permission 如果有 rendezvous ControlPermissions,会把 local option 映射到 rendezvous permission bitmap;bitmap 没设才回落到本地 option。位图解码在 src/common.rsget_control_permission,每项 2 bit,1 = disable2 = enable

登录主流程也不是单一密码检查。未授权时,connection 只允许处理 LoginRequestAuth2faTestDelayCloseReason 等少数消息。LoginRequest 会先按连接模式检查权限:file transfer、view camera、terminal、port forward 都有各自开关。之后还会处理 ID/直连地址匹配、approve mode、无密码、密码错误、最近 session、Linux headless、OS login、connection manager 审批和 2FA。

授权之后,危险能力仍然有 gate。输入事件会检查连接模式;view camera 连接会忽略 mouse/key;重启只在 self.restart 为 true 时执行;分辨率调整要检查 self.keyboard;音频、隐私模式、文件、剪贴板也都有各自状态和订阅更新。

这就是 RustDesk 比“远程桌面投屏工具”更值得读的地方:它把可达性、身份认证、权限位图、本地配置、连接模式和服务订阅放在同一条链上,而不是把“已连接”当成万能许可。

最后怎么读

如果只读一条主线,我建议按这个顺序:

  1. 1. src/core_main.rs:确认 GUI、CLI、server mode 怎么进入 runtime。
  2. 2. src/server.rs:看 start_serverServer::newadd_connectionsubscribe
  3. 3. src/rendezvous_mediator.rs:看 host 如何注册、收 punch hole、决定 relay/direct。
  4. 4. src/client.rs:看 controller 如何发 PunchHoleRequest、竞争连接路径、进入 secure connection。
  5. 5. src/server/connection.rs:看认证、2FA、权限、服务订阅和危险 action gate。
  6. 6. src/server/video_service.rs:看视频 capture、encode、send、ack、QoS。
  7. 7. src/client/io_loop.rs:看 client 如何接收视频、音频、剪贴板、文件和权限变化。
  8. 8. libs/hbb_common/protos/*.proto:最后回到协议字段,整理连接类型、权限位和消息边界。

RustDesk 的项目价值,不只是把一台电脑的屏幕送到另一台电脑。它真正清楚地处理了远程桌面里最麻烦的几件事:网络路径不可靠,所以连接建立要多路径协调;host 能力太危险,所以必须按权限和连接模式拆开;视频只是其中一个 service,音频、剪贴板、输入、文件和 terminal 都要被同一套连接边界管理。读懂这三层,再看 RustDesk 的任何功能分支,都会更容易判断它是在解决连接问题、服务订阅问题,还是权限边界问题。

                 
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-17 00:15:56 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/754588.html
  2. 运行时间 : 0.240532s [ 吞吐率:4.16req/s ] 内存消耗:4,785.27kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1d959505f632050c232384463124394e
  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.000545s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000715s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001289s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.006171s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000541s ]
  6. SELECT * FROM `set` [ RunTime:0.005209s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000733s ]
  8. SELECT * FROM `article` WHERE `id` = 754588 LIMIT 1 [ RunTime:0.022376s ]
  9. UPDATE `article` SET `lasttime` = 1781626556 WHERE `id` = 754588 [ RunTime:0.001321s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.001693s ]
  11. SELECT * FROM `article` WHERE `id` < 754588 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.010928s ]
  12. SELECT * FROM `article` WHERE `id` > 754588 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.017071s ]
  13. SELECT * FROM `article` WHERE `id` < 754588 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.011121s ]
  14. SELECT * FROM `article` WHERE `id` < 754588 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.025239s ]
  15. SELECT * FROM `article` WHERE `id` < 754588 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.040665s ]
0.244396s