websocat 1.14.1 是命令行的 WebSocket 工具,单个 exe 1929728 字节,把 ws:// 地址当普通管道用。

它要解决的是:想手动试一个 WebSocket 接口,浏览器控制台只能连不能脚本化,写段客户端代码又得先装运行时。

这次量了它的帮助规模、连接耗时,也踩了一个按文档写法服务端不回显的坑。

一个 1929728 字节的 exe

单文件,Rust 编译,直接下载就能用,是这批工具里体积最小的一个。

项值说明
websocat.exe1929728 字节websocat.x86_64-pc-windows-gnu.exe
版本1.14.1--version 输出一行
--help 输出10345 字节一屏放不下
长参数28 个帮助里以 -- 开头的选项计数

约 1.9 MB 换一个协议转换器

它不只是 WebSocket 客户端,还能把 WebSocket、TCP、文件、进程标准输入这些通道两两对接。体积主要来自这些内置的地址类型。

帮助有 10345 字节,默认还藏了一批

帮助里明确写着 some flags are hidden, see --help=long。日常用的十来个选项在默认帮助里,剩下的要加长的才看得到。

三种写法

帮助开头就把用法分成三行,对应三种场景。

写法用途
websocat ws://URL最简单的客户端,连上去后键盘输入就是发送
websocat -s port在同一个终端里起一个简单的 WebSocket 服务端
websocat 地址1 地址2高级模式,把两个通道对接

高级模式才是它的本体

前两种是给人现成用的,第三种才解释它为什么叫 socat。两个地址写什么,决定数据从哪来到哪去。

地址类型有二十多种

帮助里列出的一份 partial list 就包括 ws、wss、ws-listen、tcp、tcp-listen、ssl-listen、sh-c、cmd、readfile、writefile、appendfile、udp、udp-listen、unix、abstractunix、exec、mirror、literal、literal?、random、rand、broadcast、autoreconnect、foreachmsg、log。

本地连一次 154 毫秒

在同一台机器上起服务端、再用客户端连过去,两次测量的耗时在 150 到 180 毫秒之间。

写法耗时回显
websocat -1 ws://127.0.0.1:18099176 ms空
websocat -1 -t ws://127.0.0.1:18099154 ms空

154 毫秒是连接与握手的成本

这 154 毫秒包含进程启动、TCP 连接、WebSocket 握手、发一条消息、退出。本地回环下,其中大头是进程启动,和之前测过的几个 Rust 工具量级一致。

-t 加了文本模式,耗时反而低 22 毫秒

176 对 154,第二次更快。这个差别来自系统缓存,不是 -t 让它变快。两次都在同一台机器同一分钟内测的。

按文档起服务端没回显

用 websocat -t -s 18099 起服务端,再从客户端发一条消息,标准输出是空的,退出码 0,没有任何报错。

环节结果
服务端启动正常,端口监听成功
客户端连接成功,退出码 0
消息回显空,0 字节
错误输出空,没有提示
websocat 1.14.1 的帮助输出里那段地址类型清单:列出 ws、wss、ws-listen、tcp、tcp-listen、ssl-listen、sh-c、cmd、readfile、writefile、appendfile、udp、unix、exec、mirror、literal、random、broadcast、autoreconnect、foreachmsg、log 等二十多种可作为两端的地址

它不报错,只是没干你期望的事

整个过程退出码都是 0,stderr 一条都没有。如果不看输出内容,会以为测试通过了。这是命令行工具里最难查的一类问题。

要做回显得显式指定两端

-s 是简易服务端,不是 echo 服务器。想让收到的消息原样发回,得用高级模式把 ws-listen 和 mirror: 或 literal: 这类地址对接起来。

什么场景值得上

要手动验证一个 WebSocket 服务,或者把 WebSocket 接进已有的管道流程。

场景合适度说明
手动连一个 ws 接口高一条命令,1.9 MB 不用装运行时
把 ws 转成 stdin/stdout高高级模式两端随便接
起 echo 服务做联调低-s 不回显,要自己拼地址
压测 WebSocket低它是一次性连接,不是压测工具

它的强项是接管道

能把 WebSocket 当成文件读写,意味着可以用 shell 的重定向、grep、jq 处理 ws 消息。这一点是浏览器控制台做不到的。

授权与费用

MIT 许可,个人与商业环境都不收费。源码在 GitHub 上,主要语言 Rust,发布页有 x86_64 与 i686 两个 Windows 构建。