webman本身不提供网络拓扑发现与图形化渲染能力,仅作为后端服务管道负责高效接收数据、转发指令、暴露指标;拓扑数据需由外部工具采集并结构化导入,前端通过d3.js等库完成可视化渲染。

Webman 本身不提供网络拓扑发现、设备扫描或图形化拓扑渲染能力,所谓“基于 Webman 的高性能网络拓扑监控”本质是用 Webman 做后端服务管道,把采集、计算、告警、展示等环节拆开实现——它只负责高效接收数据、转发指令、暴露指标,不是拓扑系统本身。
Webman 能做什么:仅限轻量数据中转与协议适配
Webman 的核心价值在于高并发、低延迟的 HTTP/TCP/UDP 接收能力,适合做以下事:
- 接收 SNMP 轮询结果(如通过
snmpget或net-snmp工具定期采集后 POST 到/api/snmp) - 作为 Zabbix/Prometheus 的 webhook 接收器,把告警事件转成统一格式写入 Redis 或 Kafka
- 暴露
/metrics接口供 Prometheus 抓取本机进程级指标(CPU、内存、连接数),但不包含交换机/路由器的端口流量 - 提供 WebSocket 接口供前端实时订阅拓扑变更事件(如某节点离线),但状态变更逻辑必须自己写
别指望 webman/admin 或 Monitor.php 能画出一张带连线的拓扑图——它们连 SNMP OID 都不解析。
拓扑数据怎么来:不能靠 Webman 主动发现
网络设备发现必须由外部工具完成,Webman 只能被动消费结构化数据。常见路径有:
- 用 Python +
pysnmp扫描子网,生成 JSON 描述(含 IP、sysName、ifDescr、邻居 LLDP 信息),再curl -X POST推给 Webman 的/api/topo/import - 用
nmap -sn或arp-scan获取在线 IP 列表,结合 SSH/SNMP 登录获取设备类型,存入 MySQL 或 SQLite - 对接现有 NMS 系统(如 LibreNMS、Cacti)的 API,定时拉取
/api/devices和/api/ports数据
Webman 里只需定义一个控制器接收并校验这些数据,例如检查 ip 字段是否合法、neighbors 是否为数组、避免 SQL 注入——不做任何扫描动作。
Webman 2.2.0版本强化了 TCP/UDP 服务支持,优化路由组管理,并增强异步任务处理能力。结合协程与连接池技术,Webman 能轻松应对高并发场景,适用于网站、接口服务、即时通讯、物联网及游戏开发,兼具高性能、灵活扩展与稳定可靠,是多场景 PHP 服务开发的理想选择。
前端拓扑图怎么渲染:Webman 不参与绘图
拓扑可视化必须由前端完成,Webman 只需提供稳定 API:
- GET
/api/topo/nodes返回节点列表(含 id、label、status、x/y 坐标) - GET
/api/topo/edges返回连线关系(source、target、bandwidth、last_update) - POST
/api/topo/layout接收前端计算的力导向布局坐标,存回数据库供下次加载
前端可用 d3.js、cytoscape.js 或 antv/g6 渲染,Webman 不处理 SVG 生成、动画插值或碰撞检测——这些 CPU 密集操作放在浏览器更合理。
性能瓶颈常卡在哪儿:别让 Webman 做不该做的事
真实压测中,拓扑监控服务崩溃往往和 Webman 无关,而是下面几处出错:
- 在控制器里直接调用
shell_exec('snmpwalk ...')—— 阻塞 Worker 进程,10 个并发就卡死 - 把整张拓扑图(含上千节点)塞进 Redis 的一个 key,用
GET一次性读取 —— 内存暴涨、GC 频繁 - 用
file_get_contents()同步请求其他采集服务 —— 超时未设、重试无退避,拖垮整个事件循环 - 在
onWorkerStart里初始化未加连接池的 PDO 实例 —— 每个 Worker 独占 DB 连接,MySQL 连接数爆满
真正要盯住的是:采集任务是否跑在独立进程(app/process/)、数据是否分片存储、API 是否按需返回子图而非全量。










