当前位置:首页>python>局域网服务发现终极指南:掌握 Python ZeroConf,让你的应用自动互相“找到彼此”

局域网服务发现终极指南:掌握 Python ZeroConf,让你的应用自动互相“找到彼此”

  • 2026-07-01 14:19:16
局域网服务发现终极指南:掌握 Python ZeroConf,让你的应用自动互相“找到彼此”

一、什么是 python-zeroconf?

python-zeroconf 是一个纯 Python 实现的 多播 DNS(mDNS)服务发现库,让应用程序能够在局域网中自动宣告和发现服务,无需任何中心化 DNS 服务器。它完整实现了 RFC 6762(mDNS 协议)和 RFC 6763(DNS-SD 服务发现规范),与 Apple 的 Bonjour 和 Linux 的 Avahi 生态完全兼容。

请在微信客户端打开

简单来说:你的设备和服务不再需要手动配置 IP 和端口,它们会在局域网上自动“喊话”,其他设备自动“听见”——这就是零配置网络的魔力。

v1.0 里程碑:python-zeroconf 在 2025 年正式发布了 v1.0 版本,标志着 API 的完全稳定和生产就绪。在此之前,MAJOR 版本号长期保持在 0,v1.0 的到来意味着向后兼容性的承诺(后续 MINOR 版本递增时才会出现不兼容变更)。

核心能力一览:

📡 服务注册:将你的应用宣告到局域网,让其他设备能够发现

🔍 服务发现:自动扫描和追踪网络中特定类型的服务

🏠 名称解析:在局域网中解析主机名到 IP 地址

🌍 双栈支持:同时支持 IPv4 和 IPv6

⚡ 异步原生:内置基于 asyncio 的异步接口,轻松集成现代 Python 应用

🪶 无外部依赖:仅依赖 Python 标准库 + 轻量的 ifaddr 包

🚀 可选 Cython 加速:可选安装 Cython 扩展以显著提升性能

二、系统架构总览

先上一张核心组件关系图,帮你快速建立全局认知:

架构解读:Zeroconf 是唯一入口,它内部管理着多播套接字、DNS 缓存和查询引擎。ServiceBrowser 通过 QueryScheduler 按 RFC 6762 规定的指数退避策略发送查询,收到响应后通过 ServiceListener 回调通知上层。异步层(AsyncZeroconf 等)对同步组件做了完整的 asyncio 适配。

三、服务发现全流程

理解服务发现的数据流是掌握整个库的关键。下图展示了从浏览器启动到获取完整服务信息的完整链路:

关键细节:QueryScheduler 先在 20-120ms 范围内随机延迟后发出首个 QU(单播)查询,然后追加 QM(多播)查询作补充。发现 PTR 记录后,浏览器会自动拉取 SRV(端口)、TXT(属性)和 A/AAAA(IP),最后组装为一个完整的 ServiceInfo 对象返回。此后的持续监控阶段,系统会在每条记录 TTL 的 75%、85%、95% 处安排三次抢救性刷新查询——全部失败才判定服务离线。

四、安装和基础设置

安装

pip install zeroconf

最低要求:Python 3.9+,仅自动安装 ifaddr >= 0.1.7 作为依赖。

组件导入速查

# 同步 API(核心)from zeroconf import (    Zeroconf,              # 主入口类    ServiceInfo,           # 服务信息描述    ServiceBrowser,        # 服务浏览器    ServiceListener,       # 监听器基类    ServiceStateChange,    # 服务状态变更枚举    ZeroconfServiceTypes,  # 浏览当前网络的所有服务类型    IPVersion,             # IPv4 / IPv6 选择)# 异步 API(asyncio 集成)from zeroconf.asyncio import (    AsyncZeroconf,    AsyncServiceBrowser,    AsyncServiceInfo,)

五、实战代码:注册一个 HTTP 服务

这是让服务“被找到”的核心。下面演示如何在局域网宣告一个运行在 8080 端口的 Web 服务:

from zeroconf import Zeroconf, ServiceInfoimport socket# ============================================================# 第一步:获取本机 IP 地址# ============================================================def get_local_ip() -> str:    """获取本机局域网 IP 地址"""    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    try:        # 不需要真的连接,只是让系统选择出站接口        s.connect(("8.8.8.8"80))        return s.getsockname()[0]    finally:        s.close()# ============================================================# 第二步:构造服务信息# ============================================================local_ip = get_local_ip()service_type = "_http._tcp.local."       # HTTP 服务类型service_name = f"MyWebServer.{service_type}"  # 完整服务名info = ServiceInfo(    type_=service_type,          # 服务类型,必须是 "_<协议>._<传输>.local." 格式    name=service_name,           # 完整服务实例名    addresses=[socket.inet_aton(local_ip)],  # IP 地址列表(二进制格式)    port=8080,                   # 服务端口    properties={                 # TXT 记录(键值对,key 和 value 必须是 bytes)        b"version"b"1.0.0",        b"author"b"YourName",        b"path"b"/api",    },    server=f"MyHost.local.",     # 服务器主机名)# ============================================================# 第三步:注册服务# ============================================================zc = Zeroconf()try:    zc.register_service(info)    print(f"✅ 服务已注册: {service_name} @ {local_ip}:8080")    print("   按 Ctrl+C 退出...")    input()  # 保持运行,等待用户中断finally:    zc.unregister_service(info)    zc.close()    print("🛑 服务已注销")

运行效果

执行后,同一局域网内的 Bonjour/Avahi 浏览器(或你自己的发现脚本)就能看到:

MyWebServer._http._tcp.local.  → 地址: 192.168.1.100  → 端口: 8080  → TXT: version=1.0.0, author=YourName, path=/api

六、实战代码:发现网络中的 HTTP 服务

有服务宣告,自然要有服务发现。以下演示如何扫描局域网内的 _http._tcp.local. 服务:

from zeroconf import Zeroconf, ServiceBrowser, ServiceListenerfrom typing import castimport socketclass MyServiceListener(ServiceListener):    """    服务发现监听器。    三个核心回调:add_service、remove_service、update_service。    """    def __init__(self):        self.discovered: dict[strdict] = {}  # 用 name 索引已发现服务    def add_service(self, zc: Zeroconf, type_: str, name: str) -> None:        """新服务被发现"""        info = zc.get_service_info(type_, name)        if info is None:            return        # 解析 IP 地址(二进制 → 可读字符串)        addresses = [            socket.inet_ntoa(cast(bytes, addr))            for addr in info.addresses        ]        service_data = {            "name": info.name,            "type": info.type,            "server": info.server,            "addresses": addresses,            "port": info.port,            "txt": {                k.decode("utf-8"): v.decode("utf-8")                for k, v in (info.properties or {}).items()            },        }        self.discovered[name] = service_data        print(f"🟢 发现服务: {name}")        print(f"   地址: {addresses}")        print(f"   端口: {info.port}")        print(f"   TXT: {service_data['txt']}")    def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None:        """服务离线"""        self.discovered.pop(name, None)        print(f"🔴 服务离线: {name}")    def update_service(self, zc: Zeroconf, type_: str, name: str) -> None:        """服务信息变更(端口、IP 或 TXT 更新)"""        print(f"🔄 服务更新: {name}")        # 重新拉取最新信息        self.add_service(zc, type_, name)# ============================================================# 启动发现# ============================================================zc = Zeroconf()listener = MyServiceListener()browser = ServiceBrowser(zc, "_http._tcp.local.", listener)print("🔍 开始扫描局域网 _http._tcp.local. 服务...")print("   按 Enter 退出\n")try:    input()  # 阻塞等待finally:    browser.cancel()    zc.close()    print("\n🛑 浏览器已关闭")    print(f"共发现 {len(listener.discovered)} 个服务:")    for name, data in listener.discovered.items():        print(f"   · {name} → {data['addresses'][0]}:{data['port']}")

输出示例

🔍 开始扫描局域网 _http._tcp.local. 服务...   按 Enter 退出🟢 发现服务: MyWebServer._http._tcp.local.   地址: ['192.168.1.100']   端口: 8080   TXT: {'version''1.0.0''author''YourName''path''/api'}🟢 发现服务: RaspberryPi._http._tcp.local.   地址: ['192.168.1.200']   端口: 80   TXT: {'platform''raspberry-pi'}

七、扫描局域网所有服务类型

如果你不确定要找什么,可以先“扫一遍”网络上有哪些服务类型:

from zeroconf import ZeroconfServiceTypesprint("📡 正在扫描局域网中所有 mDNS 服务类型...\n")all_types = ZeroconfServiceTypes.find()for i, stype in enumerate(all_types, 1):    print(f"   {i:>3}{stype}")print(f"\n共发现 {len(all_types)} 种服务类型")

典型输出:

   1. _adb-tls-connect._tcp.local.   2. _airplay._tcp.local.   3. _esphomelib._tcp.local.   4. _hap._tcp.local.                ← HomeKit   5. _http._tcp.local.   6. _printer._tcp.local.   7. _ssh._tcp.local.   8. _workstation._tcp.local.

八、异步 API:拥抱 asyncio 生态

对于使用 asyncio 的现代 Python 应用(如 Home Assistant、FastAPI 服务),异步 API 是更自然的选择:

import asynciofrom zeroconf import Zeroconf, ServiceStateChangefrom zeroconf.asyncio import AsyncZeroconf, AsyncServiceBrowser, AsyncServiceInfoasync def async_browser_callback(    zeroconf: Zeroconf,    service_type: str,    name: str,    state_change: ServiceStateChange,) -> None:    """异步回调 —— 在事件循环中直接处理服务事件"""    if state_change == ServiceStateChange.Added:        print(f"🟢 [async] 发现: {name}")        # 异步请求完整服务信息,不阻塞事件循环        info = AsyncServiceInfo(service_type, name)        if await info.async_request(zeroconf, timeout=3000):            addrs = [f"{a}" for a in info.parsed_addresses()]            print(f"   地址: {addrs}, 端口: {info.port}")    elif state_change == ServiceStateChange.Removed:        print(f"🔴 [async] 离线: {name}")async def main():    """异步入口"""    aio_zc = AsyncZeroconf()    # 创建异步浏览器    browser = AsyncServiceBrowser(        aio_zc.zeroconf,        "_http._tcp.local.",        handlers=[async_browser_callback],  # 支持多个回调    )    print("🔍 [async] 开始扫描(10 秒后自动停止)...")    await asyncio.sleep(10)    await browser.async_cancel()    await aio_zc.async_close()    print("🛑 [async] 扫描结束")if __name__ == "__main__":    asyncio.run(main())

异步关键点:AsyncServiceBrowser 直接接收协程回调;AsyncServiceInfo.async_request() 以非阻塞方式拉取完整服务信息;AsyncZeroconf 管理着与同步 Zeroconf 共享的引擎实例。

九、进阶:同时监控多种服务类型

ServiceBrowser 支持同时监控多种服务类型,这在构建智能家居网关或多协议发现面板时非常实用:

from zeroconf import Zeroconf, ServiceBrowser, ServiceListenerclass MultiTypeListener(ServiceListener):    def add_service(self, zc, type_, name):        print(f"🟢 [{type_}] 新服务: {name}")    def remove_service(self, zc, type_, name):        print(f"🔴 [{type_}] 离线: {name}")    def update_service(self, zc, type_, name):        print(f"🔄 [{type_}] 更新: {name}")zc = Zeroconf()listener = MultiTypeListener()# 同时监控 HTTP、SSH 和 ESPHome 设备types_to_monitor = [    "_http._tcp.local.",    "_ssh._tcp.local.",    "_esphomelib._tcp.local.",   # ESPHome 固件设备的专属类型]browsers = []for stype in types_to_monitor:    browser = ServiceBrowser(zc, stype, listener)    browsers.append(browser)try:    input("按 Enter 停止监控...\n")finally:    for b in browsers:        b.cancel()    zc.close()

十、mDNS 协议内幕:查询调度与流量优化

python-zeroconf 严格遵循 RFC 6762 规定的流量压缩策略,在网络流量和发现速度之间进行精细平衡。

核心机制详解:

已知应答抑制:查询时附带已知的 PTR/SRV/TXT/A 记录列表,响应方跳过这些重复信息,大幅减少多播风暴

重复问题抑制:短时间内收到相同查询时,仅处理首次,避免重复触发响应

指数退避查询:启动时密集查询(1 → 2 → 4+ 秒间隔),稳定后拉长周期,降低网络负载

TTL 分级抢救:在记录到期前 75% → 85% → 95% 三个时间点分别尝试刷新,全部失败才移出缓存

TC 位处理:DNS 响应过大时设置截断位(TC),库自动适配处理多包传输的情形

缓存刷新位:记录更新时利用 cache flush 位将旧记录 TTL 置为 1 秒,保证新记录立即生效

十一、v1.0 关键变化与升级指南

python-zeroconf v1.0.0 在 2025 年正式发布,以下是值得关注的改动:

API 稳定性承诺:v1.0 标志着 API 进入成熟期,后续仅 MAJOR 版本号变更时才可能出现不兼容改动——这是从 0.x 时代“MINOR 即破坏性变更”规则的重大转折。

异步 API 完善:AsyncServiceBrowser、AsyncServiceInfo、AsyncZeroconf 自 v1.0 起成为一级支持组件,回调原生支持协程。

Cython 3.1 支持:可选安装 Cython 加速层,在保留纯 Python 灵活性的同时显著提升 DNS 解析和缓存操作的性能。

IPv6 双栈改进:v1.0 对双栈套接字(Dual-Stack)的处理更为稳健,虽然在某些 BSD 变体上仍有限制。

流量抑制增强:查询调度器进一步优化,将网络占用压缩到协议允许的理论下限。

十二、延伸资源

📂 GitHub 仓库:python-zeroconf/python-zeroconf

📘 RFC 6762 - Multicast DNS:https://datatracker.ietf.org/doc/html/rfc6762

📙 RFC 6763 - DNS-Based Service Discovery:https://datatracker.ietf.org/doc/html/rfc6763

🐍 PyPI 页面:https://pypi.org/project/zeroconf/

🧠 DeepWiki 技术文档:https://deepwiki.com/python-zeroconf/python-zeroconf

python-zeroconf 将复杂的 mDNS 协议细节封装成简洁优雅的 Python API,让你三分钟搞定局域网服务发现。无论是构建 IoT 设备仪表盘、微服务注册中心,还是个人自动化脚本,它都是不可或缺的工具。让设备会说话,让网络懂你心——从一行 pip install zeroconf 开始。 🚀

编辑:余文彬

审校:余雨馨

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-04 16:56:37 HTTP/2.0 GET : https://f.mffb.com.cn/a/489914.html
  2. 运行时间 : 0.654097s [ 吞吐率:1.53req/s ] 内存消耗:4,741.47kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6832411574da4d26b0e0cd052679fd60
  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.000768s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001082s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.034480s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.007383s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001789s ]
  6. SELECT * FROM `set` [ RunTime:0.002179s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001423s ]
  8. SELECT * FROM `article` WHERE `id` = 489914 LIMIT 1 [ RunTime:0.001573s ]
  9. UPDATE `article` SET `lasttime` = 1783155397 WHERE `id` = 489914 [ RunTime:0.008773s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.024894s ]
  11. SELECT * FROM `article` WHERE `id` < 489914 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.002814s ]
  12. SELECT * FROM `article` WHERE `id` > 489914 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.005059s ]
  13. SELECT * FROM `article` WHERE `id` < 489914 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.020342s ]
  14. SELECT * FROM `article` WHERE `id` < 489914 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.024102s ]
  15. SELECT * FROM `article` WHERE `id` < 489914 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.372474s ]
0.657840s