当前位置:首页>python>AFSIM 12篇 Java/Python 接入 AFSIM:TCP 客户端开发实战

AFSIM 12篇 Java/Python 接入 AFSIM:TCP 客户端开发实战

  • 2026-08-21 09:32:52
AFSIM 12篇 Java/Python 接入 AFSIM:TCP 客户端开发实战

第 11 篇《External Control》里我们讲了 wsf_external_control 插件会在本机 127.0.0.1:31000 起一个 TCP server。本篇就动手——用 Java 写一个 TCP 客户端连上去,把它真正"驱动"起来。我会给出可对照的代码片段、JSON 指令格式、Spring Boot 集成方式,再附一段 Python 等价实现和踩坑清单。

一、先看清通信契约

在写代码前要明确:我们连的是 127.0.0.1:31000 的 TCP server,连接建立后双向收发管道分隔的纯文本命令(真实格式为COMMAND|key=value|...),每条消息以换行符 \n 作为分隔(行协议,简单可靠)。客户端主动拉取状态、主动下发指令;插件主动推送 track 快照(响应 DATA|...)。记住这个"行协议 + 管道文本"的基调,后面代码都围绕它(第 11 篇已用安装实证纠正了此前"JSON"的说法)。

为什么是 127.0.0.1(环回地址)而不是某个局域网 IP?因为外部控制追求最低延迟与最高安全——控制程序通常和 AFSIM 引擎跑在同一台机器上,走环回网卡几乎零网络开销,也不会把仿真端口暴露给外部网络被人误连。如果你的架构确实需要跨机控制(例如后端部署在另一台服务器),那就得把插件监听地址改成可达 IP,并叠加防火墙与鉴权,否则等于把"开火权"敞开了大门。对绝大多数学习与原型场景,守住 127.0.0.1 是最省心也最稳妥的选择。

二、Java TCP 客户端核心代码

下面是一个最小可对照的 Java 客户端骨架:建立 Socket、拿到读写流、按行收发。

public class AFSIMClient {    private final String host = ”127.0.0.1”;    private final int port = 31000;    private Socket socket;    private BufferedReader in;    private BufferedWriter out;    public void connect() throws IOException {        socket = new Socket(host, port);           // 连接插件 TCP server        in  = new BufferedReader(                  new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8));        out = new BufferedWriter(                  new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8));        System.out.println(”已连接 AFSIM 外部控制端口 ” + host + ”:” + port);    }    // 发送一行 JSON 指令(以 \n 结尾)    public void send(String json) throws IOException {        out.write(json);        out.write(”\n”);        out.flush();    }    // 读取插件推送的一行(track / 状态)    public String receive() throws IOException {        return in.readLine();    }}

注意:务必用 StandardCharsets.UTF_8 统一编码,否则中文平台名或日志可能出现乱码(详见第四节坑点)。

三、COMMAND|key=value 指令封装(真实线协议)

结合真实项目里的 UAV_01(RECON_STRIKE_UAV)与 Enemy_Ship(ENEMY_DDG),一条让无人机抵近并打击的指令长这样:

MOVE_TO|platform=UAV_01|lat=32.85|lon=120.50|alt=8000|speed=220FIRE|platform=UAV_01|weapon=fox3|target=Enemy_Ship|qty=1

插件收到后,会分别翻译成第 11 篇讲的 FlyToEvent 与 FireWeaponEvent,入队由仿真执行。封装成方法很自然:

public void moveTo(String platform, double lat, double lon, double alt, double speed) throws IOException {    String cmd = String.format(”MOVE_TO|platform=%s|lat=%f|lon=%f|alt=%f|speed=%f”,                                platform, lat, lon, alt, speed);    send(cmd);}public void fireWeapon(String platform, String weapon, String target) throws IOException {    String cmd = String.format(”FIRE|platform=%s|weapon=%s|target=%s|qty=1”,                                platform, weapon, target);    send(cmd);}

有两个易错点值得提前说:第一,坐标单位与原点必须和插件端约定一致(经纬度用十进制度或度分秒串,取决于插件解析逻辑),否则无人机会"飞到一个莫名其妙的点";第二,target 填的是平台名字符串(如 "Enemy_Ship"),插件会去 WsfTrackList 里查这个名字对应的 track 再开火,名字拼错就会"找不到目标"。在真实项目里,我们通常会先发 GET_STATUS / LIST_PLATFORMS 确认目标存在且在我方射程内,再下发 FIRE,避免盲目开火。

四、与 Spring Boot 集成

真实项目里,客户端不会裸跑,而是作为 Spring Boot 的一个服务 bean 管理连接生命周期,并通过 Controller 暴露给前端。核心类就是 ExternalControlService:

@Servicepublic class ExternalControlService {    private AFSIMClient client;    @PostConstruct    public void init() throws IOException {        client = new AFSIMClient();        client.connect();                 // 应用启动即连 127.0.0.1:31000        startReceiveLoop();               // 后台线程持续拉取 track    }    private void startReceiveLoop() {        new Thread(() -> {            try {                while (true) {                    String line = client.receive();   // 插件推送的 track/状态                    if (line == null) break;                    handleTrack(line);                // 更新态势、触发决策                }            } catch (IOException e) { /* 重连逻辑 */ }        }).start();    }    public void orderStrike() throws IOException {        client.flyTo(”UAV_01”, 120000, 85000, 5000);        client.fireWeapon(”UAV_01”, ”Enemy_Ship”);    }}

再用一个 Controller 把能力暴露出去:

@RestController@RequestMapping(”/afsim”)public class ExternalControlController {    @Autowired private ExternalControlService svc;    @PostMapping(”/strike”)    public String strike() throws IOException {        svc.orderStrike();        return ”指令已下发”;    }}

这样,前端点一下按钮,后端就通过 TCP 把指令送进仿真——一个完整的"感知-决策-行动"闭环就搭好了。

五、Python 等价客户端

如果你更习惯 Python(比如做算法验证),等价实现非常短:

import socketdef main():    s = socket.create_connection((”127.0.0.1”, 31000))# 真实协议:管道分隔纯文本,以 \n 结尾    s.sendall(b”MOVE_TO|platform=UAV_01|lat=32.85|lon=120.50|alt=8000|speed=220\n”)    print(s.recv(4096).decode(”utf-8”))# 形如 OK|... 或 DATA|...    s.close()if __name__ == ”__main__”:    main()

可见 Python 与 Java 的差异只在语法,通信契约完全一致——同一套COMMAND|key=value管道文本协议,谁都能连

在真实项目里,我们的客户端遵循一个简单但稳健的"先读后写"模式:启动后先持续 receive() 插件推送的 track 快照,把它解析成内存里的态势对象;业务线程(如 Controller 收到前端请求)再基于这份最新态势决定要不要下发 MOVE_TO / FIRE。也就是说,读是常驻后台线程,写是按需触发,两者通过同一个 Socket 协作。多线程共用一个输出流时要加锁,避免两条指令黏在一起被插件当一条解析而报错。这个小细节,是多数初学者第一次联调时最容易被绊倒的地方。

六、常见坑清单

  • 连接被拒(Connection refused):99% 是 wsf_external_control 插件没启动,或仿真还没跑到监听那一步。确认 AFSIM 场景已加载该插件、仿真正在运行,再确认端口确实是 31000 而非被改过。别急着改代码,先看 Wizard 运行日志有没有"external control listening"字样。
  • 编码乱码:务必客户端与插件两端统一 UTF-8;Java 不要依赖平台默认编码。Windows 上 new OutputStreamWriter(socket.getOutputStream()) 不指明字符集时会用系统默认(GBK),与插件的 UTF-8 一碰面中文就乱码——始终显式传 StandardCharsets.UTF_8
  • 心跳/超时:长时间无交互,某些环境会断连。可在空闲时周期性发一个轻量 ping 消息保活,断连后做指数退避重连,尽量不要用死循环无间隔重连把 CPU 打满。
  • 消息边界:用 \n 行分隔,读取端要用 readLine 或按行切分,别一次性读半条命令。若一次 recv 拿到两条消息,要按 \n 拆开逐条解析——每条都是形如 COMMAND|key=value|... 的纯文本,黏在一起会被插件当成一条错指令。
  • 指令未生效:确认平台名拼写与仿真内一致(UAV_01 不是 uav_01),且目标在射程/航程内。插件不会替你校验"能不能打到",发错只会被静默忽略或报错。
  • 多线程写竞争:如上一节所说,后台读线程与业务写线程共用 Socket 输出流,务必加锁串行化写操作,否则两条指令黏连会导致解析失败。

小结

  • 外部控制是 TCP 行协议 + 管道文本:客户端连 127.0.0.1:31000,按 \n 分隔收发形如 COMMAND|key=value|... 的纯文本消息(不是 JSON)。
  • Java 客户端核心是 Socket + BufferedReader/Writer,统一 UTF-8;指令以 MOVE_TO / FIRE 等 COMMAND|... 文本行下发,响应以 OK| / ERROR| / DATA| 文本行回传。
  • Spring Boot 中由 ExternalControlService 管理连接与接收循环,经 Controller 暴露给业务/前端。
  • Python 客户端与 Java 同契约,几行即可连上,适合算法快速验证。
  • 踩坑重点:连接被拒=插件未启动、编码统一、心跳保活、行边界、平台名大小写。想扩展协议或自己写插件,见 第 14 篇《自定义 C++ 插件开发》。

下期预告

代码闭环已经打通,但"我到底有没有连对、指令有没有生效、态势长啥样",光看日志不够直观。下一篇《13 可视化利器 Wizard:快速调试与态势呈现》带你用 AFSIM 自带的 Wizard 把场景树、track、外部控制连接状态一目了然地呈现出来,调试效率直接拉满。点赞收藏关注,咱们下期见!

最新文章

随机文章

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