websocat 1.14.1 是命令行的 WebSocket 工具,单个 exe 1929728 字节,把 ws:// 地址当普通管道用。
它要解决的是:想手动试一个 WebSocket 接口,浏览器控制台只能连不能脚本化,写段客户端代码又得先装运行时。
这次量了它的帮助规模、连接耗时,也踩了一个按文档写法服务端不回显的坑。
一个 1929728 字节的 exe
单文件,Rust 编译,直接下载就能用,是这批工具里体积最小的一个。
| 项 | 值 | 说明 |
|---|---|---|
| websocat.exe | 1929728 字节 | 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:18099 | 176 ms | 空 |
| websocat -1 -t ws://127.0.0.1:18099 | 154 ms | 空 |
154 毫秒是连接与握手的成本
这 154 毫秒包含进程启动、TCP 连接、WebSocket 握手、发一条消息、退出。本地回环下,其中大头是进程启动,和之前测过的几个 Rust 工具量级一致。
-t 加了文本模式,耗时反而低 22 毫秒
176 对 154,第二次更快。这个差别来自系统缓存,不是 -t 让它变快。两次都在同一台机器同一分钟内测的。
按文档起服务端没回显
用 websocat -t -s 18099 起服务端,再从客户端发一条消息,标准输出是空的,退出码 0,没有任何报错。
| 环节 | 结果 |
|---|---|
| 服务端启动 | 正常,端口监听成功 |
| 客户端连接 | 成功,退出码 0 |
| 消息回显 | 空,0 字节 |
| 错误输出 | 空,没有提示 |

它不报错,只是没干你期望的事
整个过程退出码都是 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 构建。







