ToolAct工具行动

WebSocket 在线测试工具

在线 WebSocket 连接测试、消息发送与接收调试工具

未连接
发送消息
0
接收消息
0
连接时长
00:00
消息总数
0
消息记录

连接后即可发送和接收消息

Ctrl + Enter 发送

什么是 WebSocket?

WebSocket 测试工具会连接指定的 WebSocket 地址,帮助确认实时通道是否能打开、发送消息并接收响应。WebSocket 常用于聊天、实时仪表盘、通知、多人互动、行情数据、设备通信和其他长连接双向场景。它适合开发调试、代理配置排查、TLS 检查,以及比较 ws:// 与 wss:// 端点行为。但它不是压测工具,也不是完整协议分析器。认证、子协议协商、心跳、重连策略、消息格式、背压和服务器限制仍需要在真实客户端和部署环境中验证。连接成功只能说明当前条件下某条路径可用。

使用方法

使用方法

  1. 在 URL 输入框中填入 WebSocket 服务器地址(ws:// 或 wss://)
  2. 可选:输入子协议,多个用逗号分隔
  3. 点击「连接」建立 WebSocket 连接
  4. 在输入框中填写要发送的消息内容
  5. 选择消息类型(Text 或 JSON),JSON 类型会自动校验格式
  6. 点击「发送」或按 Ctrl + Enter 发送消息
  7. 在消息列表中查看已发送和已接收的消息,点击即可复制

连接提示

  • 从 HTTPS 页面测试时请使用 wss://;浏览器通常会阻止安全来源下的非安全 ws:// 连接。
  • 调试过程中,在断开连接、刷新或切换端点之前,请先导出或复制重要的消息日志。

使用场景

手动连接 WebSocket 端点输入 ws:// 或 wss:// URL,可选提供逗号分隔的子协议,打开一个浏览器 WebSocket 连接。仅使用你输入的 URL 和子协议;浏览器只向该端点发起单一连接,不会访问其他地址。状态栏区分未连接、连接中、已连接和错误状态,可用时会显示关闭码详情。
发送和检查文本或 JSON 消息编写文本或 JSON 消息,在 JSON 模式下发送前会验证格式,通过 Ctrl 或 Command 加回车发送。发送和接收的消息都带有时间戳、字节大小标记,可解析时标记为 JSON 并尽可能以格式化 JSON 显示,方便逐帧与服务端预期进行对比。
导出 WebSocket 会话记录消息日志最多保留 500 条,跟踪发送数、接收数和连接时长,可导出为 JSON 文件。单条消息也可以复制用于调试 API 对话或实时事件流,或与关闭码和时长一起附在工单中。
探测子协议协商连接前输入逗号分隔的子协议(如 'graphql-ws,soap,wamp')。握手会在 Sec-WebSocket-Protocol 响应头中回显服务端选择的值,这是检查客户端和网关是否达成一致、或代理是否剥离了请求值的最快方法。如果响应中缺少该头,服务端将请求视为普通 WebSocket,你的应用层解析器很可能会在第一条消息上失败,因为双方的帧格式不再匹配。
观察心跳和空闲超时保持连接打开不发送任何流量,观察是否收到未经请求的 ping 帧或自动关闭。将空闲间隔与服务端文档中的心跳间隔对比以确认保活设置是否匹配,并捕获关闭码以便区分正常的 1000 和异常关闭如 1006。实际上 NGINX 默认的 proxy_read_timeout 为 60 秒,许多云负载均衡器在 60 到 350 秒左右丢弃空闲连接,因此刚好超过一分钟就关闭的连接几乎总是代理切断而非服务端 bug。区分 1006(异常关闭,未收到关闭帧)和 1001(离开)或 1011(服务端错误)能帮助你判断是该找代理管理员还是应用团队。

技术原理

WebSocket 协议的核心是 HTTP 升级。客户端首先发送普通的 HTTP GET 请求,但附带 Upgrade: websocket 和 Connection: Upgrade 头以及一个随机生成的 Sec-WebSocket-Key。服务器验证这些头后,返回 101 Switching Protocols 响应,包含 Sec-WebSocket-Accept 值——该值是 Key 拼接固定 GUID 后取 SHA-1 再 Base64 编码的结果。101 响应之后,TCP 连接从 HTTP 切换到 WebSocket,后续数据以 WebSocket 帧的形式传输。WebSocket 帧头至少 2 字节,包含 FIN 标志、操作码(0x1 文本、0x2 二进制、0x8 关闭、0x9 ping、0xA pong)和载荷长度。ping/pong 帧用于心跳检测;浏览器 API 不会自动发送,需要应用层实现。wss:// 等同于 HTTPS+WebSocket,先进行 TLS 握手再进行 WebSocket 升级;ws:// 是明文传输,浏览器会拒绝 https 页面上的 ws:// 端点以防止降级攻击。单帧默认上限约 1MB,较长的消息会拆分为多帧传输。

  • 握手:客户端发送带 Upgrade: websocket 头的 HTTP GET 请求,服务器返回 101 Switching Protocols 表示升级成功
  • Sec-WebSocket-Key 是浏览器随机生成的 16 字节 Base64 字符串;服务器拼接固定 GUID 后取 SHA-1,通过 Sec-WebSocket-Accept 验证
  • 帧格式:每个帧携带至少 2 字节的头,包含 FIN、操作码(文本/二进制/ping/pong/关闭)和载荷长度
  • ws:// 是明文传输,wss:// 是基于 HTTPS 的 WebSocket;浏览器在 https 站点上拒绝 ws:// 以防止降级攻击
  • ping/pong 帧用于心跳:RFC 6455 要求每个 ping 都必须回复 pong;浏览器不会自动发送心跳,需要应用层实现
  • 关闭序列:任一方发送带状态码的 0x8 关闭帧,对端回复匹配的关闭帧,之后 TCP 连接才真正释放

示例

连接公共 Echo 服务

wss://echo.websocket.org —— 101 Switching Protocols 握手成功,发送 "hello" 立即回显 "hello"

调试自己的 WebSocket 服务

wss://api.example.com/ws —— 子协议 graphql-ws,连接成功,订阅消息正常接收

复现连接断开问题

wss://api.example.com/ws —— 服务端在连接建立 30 秒后主动关闭,关闭码 1006(异常关闭)

常见问题

这个 WebSocket 测试工具能做什么?

可以连接任意 ws:// 或 wss:// 端点,收发消息并查看协议交互过程。在开发期间用于测试 WebSocket API、基于 WS 的 MQTT 代理、实时游戏服务器、聊天系统、行情推送等都很方便。

消息会经过你们的服务器吗?

不会。浏览器会直接与目标主机建立 WebSocket 连接,不经任何中转,我们这边也不会有日志。目标主机看到的就是你的 IP,和其他普通客户端一样。

为什么连不上我本地的端点?

混合内容规则:如果本页面是通过 HTTPS 加载的,浏览器会拦截 ws://(不安全)连接。请把目标改成 wss://,或在本地测试时用 HTTP 加载本页面。具体的拦截原因可以在浏览器控制台中看到。

可以发送二进制数据吗?

可以。多数版本同时支持文本帧和二进制帧。二进制输入通常用 Base64 或十六进制,发送前页面会先解码。二进制响应默认以十六进制或 Base64 形式展示。

怎么添加自定义请求头?

浏览器的 WebSocket API 不允许自定义请求头——这是 Web 平台的限制。唯一能设置的请求头是 Sec-WebSocket-Protocol(子协议)。要做 Bearer token 认证,可以用查询参数或首条消息认证;部分服务器也接受 Cookie。

能测试压缩和扩展协议吗?

对于声明支持 per-message-deflate 的服务器,浏览器会自动协商,页面通常会显示协商出的扩展名。自定义扩展无法测试——浏览器没有暴露相关控制接口。

为什么我的连接老是断开?

常见原因:服务器空闲超时(通常 30-120 秒)、代理或负载均衡的超时、网络中断,或者你笔记本进入睡眠。现代 WebSocket 需要 ping/pong 心跳;请确认服务器有发送 ping,或让客户端定期发送消息保活。