Wireshark抓Workerman纯TCP流量需用tcp.port==端口号过滤,结合ip.addr和tcp.srcport/tcp.dstport区分方向;WebSocket握手可识别,但后续帧需TLS私钥解密或手动解析RFC6455结构,Chrome DevTools无法捕获Workerman客户端通信。

Wireshark 抓 TCP 流量必须过滤端口和连接方向
Workerman 的纯 TCP 连接(比如硬件设备直连)在 Wireshark 里就是裸 TCP 流,不会自动识别为 WebSocket 或自定义协议。不加过滤器会淹没在系统流量中,根本找不到你的设备通信包。
实际操作时,先用 tcp.port == 8080(替换成你 Workerman 监听的端口)过滤;如果知道设备 IP,再加 ip.addr == 192.168.1.100;若要区分收发方向,用 tcp.srcport == 8080 看服务端发出的数据,tcp.dstport == 8080 看设备发来的原始字节流。
常见错误:只写 tcp,结果抓到 DNS、ARP、HTTP 等一堆无关包;或误用 http 过滤器去抓非 HTTP 的 TCP 连接,完全匹配不上。
WebSocket 握手阶段能看清,但后续帧需 TLS 解密才可读
Workerman 启的 WebsocketServer 在 Wireshark 里能识别握手请求(GET + Upgrade 头),但一旦升级完成,后续所有数据都是 WebSocket 帧格式——Wireshark 默认能解析帧结构(Opcode、FIN、Masked),但 payload 是加密的(wss)或二进制(ws),看不到明文内容。
如果用的是 wss://,必须在 Wireshark 的 Protocols > TLS 设置里导入服务器私钥,否则 payload 显示为 “Encrypted Application Data”;如果是 ws://,payload 虽可见,但仍是 RFC 6455 编码后的帧,不是原始 $data,需手动解包(如用 unpack('C*', $frame) 拆头)。
别指望 Wireshark 直接显示 onMessage 收到的字符串——它看到的是网络层帧,不是 PHP 应用层解包后的结果。
WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。
Chrome DevTools 只能看浏览器 WebSocket,对 Workerman TCP 客户端无效
chrome://devtools/Network 的 ws 标签页只捕获浏览器发起的 WebSocket 连接,Workerman 作为服务端时,它完全不可见;Workerman 用 AsyncTcpConnection 主动连第三方 wss 地址时,那属于 PHP 进程内的 socket 行为,Chrome 更是毫无感知。
想验证 Workerman 客户端是否成功连上币安或 Pusher,得靠日志:$client->onConnect 触发才算握手成功;$client->onError 里的 $code 和 $msg 才是真实依据。DevTools 在这里只是个旁观者,不是调试工具。
一个典型误判:在 DevTools 看不到“发送帧”,就以为 Workerman 没发数据——其实数据早通过底层 socket 发出去了,只是没走浏览器通道。
Workerman 内部打点比抓包更直接有效
与其花半小时配 Wireshark 解密 TLS,不如在 onMessage 里加一行 var_dump(bin2hex($data));,立刻看到原始字节;对 TCP 设备连接,直接在 onMessage 开头 dump $connection->getRemoteIp() 和 strlen($data),比抓包更快定位是设备发少了还是 Workerman 收错了。
关键点在于:Wireshark 看的是 wire 上的字节,Workerman 看的是经过内核 socket 缓冲区、PHP stream 层、框架 buffer 后的 $data——中间任何一层都可能拆分或合并。所以抓包看到“两个包”,onMessage 却只触发一次,不一定是 bug,很可能是 TCP 流控或 Nagle 算法导致的。
真正要调通硬件对接,优先检查 $connection->frame_buffer 是否按帧头/长度字段正确切分,而不是纠结 Wireshark 里第几个 TCP segment 带了校验和。

















