Webman 无内置 InfluxDB 支持,需手动集成 influxdata/influxdb-client-php:Client 必须单例化,WriteApi 每次写入新建;measurement 名须小写下划线,tag 值必须字符串,时间戳须纳秒级,bucket 需预设 retention policy。

Webman 不能直接连 InfluxDB,必须靠 influxdata/influxdb-client-php 手动集成,且 Client 必须单例化、WriteApi 每次写入都得新建 —— 否则数据会丢或连接泄漏。
为什么 Webman 没有内置 InfluxDB 支持
Webman 是一个高性能 PHP HTTP 服务框架,本身不封装数据库驱动层,也不提供时序数据库适配器。它只负责请求分发和生命周期管理。InfluxDB 的 PHP 客户端 influxdata/influxdb-client-php 是纯 HTTP 客户端,不依赖 Laravel 或 Symfony 等生态组件,因此 Webman 能用,但得自己管好实例生命周期。
- Client 实例包含连接池和配置(token/org/bucket),必须全局单例,否则频繁重建会耗尽 socket 资源
- WriteApi 是无状态的写入通道,每次调用
writeApi()->write()前都应新建,不能复用 —— 它内部会自动处理 batch 和 flush,复用会导致 buffer 冲突或写入延迟 - 若在 Worker 进程里缓存 WriteApi 实例,下次写入可能因超时或 token 过期失败,且错误难以定位
measurement 名和 tag 值的强制规范
InfluxDB 对写入结构敏感,PHP 客户端不会帮你校验,错一点就静默丢数据或写进错误 series。
Webman 2.2.0版本强化了 TCP/UDP 服务支持,优化路由组管理,并增强异步任务处理能力。结合协程与连接池技术,Webman 能轻松应对高并发场景,适用于网站、接口服务、即时通讯、物联网及游戏开发,兼具高性能、灵活扩展与稳定可靠,是多场景 PHP 服务开发的理想选择。
-
measurement名必须全小写 + 下划线,比如cpu_usage、service_latency_ms;大写或中划线(如CPU-Usage)会被拒绝,但客户端不报错 - 所有
tag值必须是字符串,传整数或布尔值(如status => 1)会导致整个 point 被跳过;需显式转成'status' => '1' -
field值可以是数字、字符串、布尔,但 null 不允许;传null会导致该 field 被忽略,且无 warning - 时间戳必须是纳秒级整数,不是毫秒或秒;
time() * 1000000000或new DateTimeImmutable()->getTimestampNano()才合规
bucket 保留策略和告警必须提前配好
InfluxDB 不会在写入时校验 retention policy,但没配的话,数据会无限堆积,磁盘很快打满,且查询变慢。
- 创建 bucket 时必须指定
--retention-period,例如influx bucket create --name webman_logs --org myorg --retention 72h - 告警逻辑不要放在 Webman 里轮询查数据 —— 高频查询会拖垮 InfluxDB;改用 InfluxDB 自身的
task+notification endpoint触发 webhook - 如果用 Line Protocol 直写(绕过 SDK),务必确保每行末尾有换行符
\n,否则整批数据可能被丢弃 - PHP 进程重启后,Client 单例要重新初始化;建议在 Webman 的
onWorkerStart回调里做 Client 构建,并绑定到Container或静态属性
最容易被忽略的是 tag 值类型和时间戳精度 —— 它们不出错也不报错,但数据一写进去就不可见,查 SHOW SERIES 都看不到对应 measurement,调试时得先用 curl 发 raw Line Protocol 验证结构是否合法。

















