命令行玩转WebSocket:别再只用浏览器测试了
什么是WebSocat?
WebSocat是一个用Rust编写的命令行WebSocket工具,设计灵感来自netcat、socat和curl,但专门为WebSocket协议打造。
快速安装
包管理器一键安装
macOS(Homebrew):
brew install websocatFreeBSD:
pkg install websocatUbuntu/Debian:
# 需要先添加PPA源
sudo add-apt-repository ppa:gqview/ppa
sudo apt update
sudo apt install websocat下载预编译版本
直接从GitHub Releases下载对应系统的版本,解压就能用。
项目地址:https://github.com/vi/websocat
从源码编译
# 需要先安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# 安装WebSocat
cargo install websocat实用场景和命令示例
1. 最简单的回显测试
# 连接到公共的WebSocket回显服务器
websocat ws://echo.websocket.org输入任意文字,服务器会原样返回。按Ctrl+D退出。
2. 快速搭建本地WebSocket服务
# 启动WebSocket服务器
websocat -s 8080
# 输出:Listening on ws://127.0.0.1:8080/另一个终端连接:
websocat ws://127.0.0.1:8080/这就搭建了一个简单的聊天室雏形!
3. TCP转WebSocket双向代理
把SSH流量转换成WebSocket格式:
websocat --oneshot -b ws-l:127.0.0.1:1234 tcp:127.0.0.1:22适用于穿透防火墙,或者把传统TCP服务集成到网页应用中。
4. 广播消息给所有连接的客户端
websocat -t ws-l:127.0.0.1:1234 broadcast:mirror:每个连接进来的客户端都能看到其他人发送的消息——轻松实现群聊功能!
5. 安全连接(WSS)
# 连接安全的WebSocket服务
websocat wss://your-secure-ws.com
# 开发时跳过证书验证
websocat -k wss://localhost:8443更多实用例子
测试远程WebSocket服务
# 连接到生产环境的WebSocket
websocat wss://api.example.com/ws
# 带上认证头信息
websocat --header="Authorization: Bearer your_token" wss://api.example.com/ws
# 设置连接超时
websocat --timeout=10 wss://api.example.com/ws文件传输
# 发送文件内容到WebSocket
websocat ws://localhost:8080 < input.txt
# 保存接收到的消息到文件
websocat ws://localhost:8080 > output.txt
# 双向文件传输
websocat ws://localhost:8080 < input.txt > output.txt实时日志监控
# 监控应用日志
tail -f app.log | websocat ws://localhost:8080/logs
# 从多个源收集日志
websocat ws://logserver:8080 | tee -a combined.log高级技巧:不只是简单连接
1. 流量监控和调试
# 查看详细的协议交互
websocat --log-io log: ws://localhost:8080
# 只查看消息内容(不显示控制帧)
websocat --text-mode ws://localhost:8080
# 十六进制显示数据
websocat --binary-mode ws://localhost:8080 | hexdump -C2. 性能优化
# 异步I/O提升性能
websocat --async-stdio ws://localhost:8080
# 调整缓冲区大小
websocat -B 65536 ws://localhost:8080
# 提高并发处理能力
websocat --max-connections=100 ws-l:127.0.0.1:80803. 自动重连和容错
# 断线自动重连
websocat autoreconnect: ws://unstable-server:8080
# 重连延迟和次数设置
websocat --reconnect-delay=5 --max-reconnects=10 ws://unstable-server:80804. JSON-RPC支持
# 与Chrome DevTools协议通信
echo '{"id":1,"method":"Page.navigate","params":{"url":"https://example.com"}}' | \
websocat --jsonrpc ws://127.0.0.1:9222/devtools/page/XXX
# 发送JSON格式的消息
echo '{"type":"message","content":"Hello"}' | websocat ws://localhost:8080
# 接收并解析JSON响应
websocat --json-output ws://localhost:80805. 数据压缩传输
# 启用gzip压缩
websocat --compress=gzip ws://localhost:8080
# 启用deflate压缩
websocat --compress=deflate ws://localhost:8080
# 双向压缩
websocat --compress-both ws://localhost:8080系统集成:不只是临时工具
1. 作为systemd服务运行
创建服务文件/etc/systemd/system/websocat.service:
[Unit]
Description=WebSocat WebSocket Proxy
After=network.target
[Service]
Type=simple
User=websocket
WorkingDirectory=/opt/websocat
ExecStart=/usr/local/bin/websocat ws-l:127.0.0.1:8080 tcp:127.0.0.1:3000
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target启动服务:
sudo systemctl daemon-reload
sudo systemctl enable websocat
sudo systemctl start websocat2. 配合Nginx反向代理
Nginx配置示例:
# WebSocket代理配置
location /mywebsocket {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 超时设置
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_connect_timeout 75s;
# 缓冲区设置
proxy_buffering off;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}3. Docker容器化
创建Dockerfile:
FROM rust:alpine as builder
RUN apk add --no-cache musl-dev
RUN cargo install websocat
FROM alpine:latest
COPY --from=builder /usr/local/cargo/bin/websocat /usr/local/bin/websocat
EXPOSE 8080
CMD ["websocat", "ws-l:0.0.0.0:8080", "tcp:backend:3000"]构建和运行:
docker build -t websocat-proxy .
docker run -p 8080:8080 --name websocat websocat-proxy实际应用场景
场景1:调试WebSocket应用
# 监控客户端和服务器的消息交换
websocat --log-io log: ws://localhost:8080
# 模拟客户端发送测试消息
echo '{"action":"ping","timestamp":"2024-01-01"}' | websocat ws://localhost:8080
# 记录完整会话
websocat --log-io log: ws://localhost:8080 | tee session.log场景2:API网关测试
# 测试WebSocket API
websocat --header="X-API-Key: test123" wss://api.example.com/v1/ws
# 发送结构化测试数据
cat test_data.json | websocat wss://api.example.com/v1/ws
# 批量测试
for i in {1..10}; do
echo "Test message $i" | websocat ws://localhost:8080
done场景3:实时数据管道
# 从WebSocket读取数据,处理后写入数据库
websocat ws://>| \
jq '. | select(.value > 100)' | \
mysql -u user -p database -e "INSERT INTO readings VALUES (...)"
# 监控和报警
websocat ws://monitor:8080 | \
while read line; do
if echo "$line" | grep -q "ERROR"; then
echo "警报:发现错误" | mail -s "系统警报" admin@example.com
fi
done场景4:跨网络传输
# 通过WebSocket隧道访问内网服务
# 服务器端(内网)
websocat --oneshot -b ws-l:0.0.0.0:8080 tcp:127.0.0.1:22
# 客户端(外网)
websocat --oneshot tcp:127.0.0.1:2222 ws://server.com:8080
# 然后通过SSH连接
ssh -p 2222 user@localhost常用命令速查
连接相关
# 基本连接
websocat ws://host:port/path
# 带认证头
websocat --header="Authorization: Bearer token" ws://host:port
# 多个头信息
websocat --header="X-User-ID: 123" --header="X-Client: test" ws://host:port服务器模式
# 启动服务器
websocat -s port
# 指定监听地址
websocat ws-l:0.0.0.0:port
# 服务器广播模式
websocat broadcast: ws-l:127.0.0.1:port调试和监控
# 显示详细日志
websocat --verbose ws://host:port
# 只显示消息(跳过控制帧)
websocat --text-mode ws://host:port
# 显示时间戳
websocat --timestamp ws://host:port | tee -a log.txt故障排除
常见问题解决
连接被拒绝
# 检查端口是否开放 nc -zv host port # 检查防火墙设置 sudo ufw statusSSL证书问题
# 跳过证书验证(仅开发环境) websocat -k wss://host:port # 使用自定义CA证书 websocat --ca-file=/path/to/ca.pem wss://host:port性能问题
# 调整缓冲区大小 websocat -B 131072 ws://host:port # 启用异步模式 websocat --async-stdio ws://host:port
最后总结
在微服务、实时通信、物联网设备调试越来越普遍的今天,掌握一个高效的WebSocket命令行工具,能极大提升开发效率。WebSocat就是那个被很多人忽视的"终端利器"。
无论你是需要:
快速测试WebSocket服务
调试实时通信应用
搭建简单的WebSocket服务器
实现网络隧道
监控数据流
WebSocat都能帮到你。它轻量、快速、功能强大,是你工具箱里值得拥有的好工具。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!