V2EX 前天 09:25
[分享创造] 掌控 WebSocket!这可能是目前最好用的 WS 调试插件,支持拦截、模拟、收藏等功能 - WebSocket DevTools
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了一款名为 WebSocket DevTools 的浏览器插件,它能帮助开发者全面调试 WebSocket 连接。该插件支持实时监控、上下行消息拦截、消息模拟、JSON 嵌套解析、收藏常用消息以及系统事件监控等功能,并且全程本地运行,无需担心隐私泄露。它解决了开发者在调试 WebSocket 时遇到的消息丢失、调试不便等痛点,尤其适合需要深入理解和控制 WebSocket 通信的开发者。插件安装简便,并提供了清晰的使用场景和技术原理说明。

🌟 **实时监控与后台抓包**:插件能够捕获并展示所有 WebSocket 连接的详细信息,即使在浏览器开发者工具关闭或 Network 面板未打开的情况下,也能持续监控连接状态和消息流,有效避免了消息丢失的尴尬情况。

🎯 **流量控制与消息拦截**:该插件支持对 WebSocket 的上下行消息进行拦截,允许开发者在消息传递过程中进行干预和查看。这一功能尤其强大,可以结合消息模拟,实现类似 HTTP API 代理的效果,对调试和测试流程提供了极大的便利。

🚀 **消息模拟与调试掌控**:提供了强大的消息模拟功能,开发者可以自定义发送或接收的消息,从而轻松测试边界条件或复现特定场景,无需依赖后端配合。模拟发送的消息不受拦截影响,为独立调试提供了有力支持。

💡 **JSON 嵌套解析与格式化**:内置的 JSON 编辑器能够自动识别并格式化嵌套的 JSON 数据,通过高亮和折叠功能,极大地提升了阅读复杂 JSON 数据的效率,解决了过去需要手动复制到第三方工具格式化的繁琐步骤。

📁 **收藏功能与调试效率**:允许用户收藏常用的消息,方便后续快速模拟发送或接收,并支持二次编辑。这对于处理复杂或重复性消息的调试场景,能够显著提高工作效率。

📈 **系统事件监控与手动建联**:插件还能监控 WebSocket 的系统事件,如连接关闭等,并提供了手动建立 WebSocket 连接的功能,使其本身也可作为一个独立的 WebSocket 客户端使用,记录最近连接地址,方便快速访问。

〇、前言

有点标题党了,不过写完这个 WebSocket 插件后我自己逛了一圈,确实目前全网无代餐,大家可以放心食用。而且这个 WebSocket 调试插件全程本地运行,不用担心隐私泄露。那我们开始

插件适合谁用?

开门见山,先说这个插件适合谁?适合任何需要调试 WebSocket 的开发者

为什么适合?

因为它提供了 监控、拦截、模拟、收藏 等其他 WebSocket 插件都没有的功能,基本对于之前浏览器 Network 的功能不满意的点,基本都能在这里找到答案。如果各位还有兴趣,下面我介绍核心功能和使用场景


一、官网和地址

(支持中文/英文,可手动切换语言)

二、核心功能详解

1. 实时监控:让 WebSocket 连接无所遁形

实际演示

首先,我们进入任意网站并成功建立了一个 WebSocket 连接(这里我使用了 websocketking.com 的测试页面,很好用的测试网站,推荐),然后按 F12 打开 DevTools ,找到 WebSocket DevTools 标签页,可以看到插件自动捕获到了这个连接,并且可以查看连接的详细信息

测试地址使用的是 wss://echo.websocket.org ,功能是回复我们发送的消息

(这里演示使用的是英文,是因为录屏实在太麻烦了,就没有重录了,抱歉。进入插件后会自动检测浏览器语言,也可以手动直接切换语言)

以前调试 WebSocket,最怕的就是“消息丢了”,在 WebSocket 建连之前忘了打开 Network 就会错过时机而看不到消息。而我们很好得解决了这个问题

功能亮点后台监控 即使 Network 关了也能抓包,不会因为错过时机而需要重新刷新网页(这是我自己的一个痛点😂)


2. 流量控制 - 做减法,拦截上下行消息

实际演示

打开消息拦截,比如 拦截接收 消息,那么我们给 echo.websocket.org 发送消息后,回复的下行消息被直接拦截,并且展示在了我们的消息列表里面。这个功能结合下面介绍的模拟功能,可以实现类似于对于 HTTP API 请求的代理功能。

功能亮点拦截上下行消息,目前市面上几乎没有类似能力的工具


3. 消息模拟 - 做加法,完美掌控 WebSocket 调试

“每次想测个边界条件,都得等后端配合?不如自己造数据!”

实际演示

点击右下角的小飞机,打开模拟控制台,然后输入消息,点击发送、接收。

模拟发送,动图中可以看到,可以看到消息被发送到了 echo.websocket.org ,并且收到回复,但是此时 拦截接收 被打开,下行消息被直接拦截。然后我关闭后,再次发送消息,Server 侧成功收到并且回复

对于模拟接收,效果同理。那么此功能打通了加法,流量控制打通了减法,那么你就完全掌控了一个 WebSocket 连接的的行为

模拟消息是不受消息拦截影响的,也就是说,模拟消息不会被拦截。这样更便于开发者调试


4. JSON 编辑器 - 支持嵌套解析 JSON

有时候,格式化就是生产力

“以前看一坨嵌套 JSON ,脑壳疼。现在自动高亮、折叠,终于能一眼看明白。”

实际演示

图中可以看到,后端发送了一个嵌套JSON,正常的工作流是复制 String 状态的 JSON 到某个三方解析工具格式化,然后查看(当然部分开发已经锻炼出了在字符串中人肉找到所需要值的能力,值得敬佩 👀)。接着,编辑器会提示说检测到这是一个有嵌套JSON,可以通过点击/关闭嵌套解析按钮来切换状态。同时,编辑器也支持一键复制、收藏、以及进入模拟控制台面板去编辑发送。(后文会提到收藏)

举个例子

{  "category": "fruits",  "items": [    {      "id": "fruit_001",      "name": "apple",      "type": "pome",      // 👇 这就是一个经典的嵌套 JSON ,非常考验眼力 👀      "origin": "{\"country\":\"USA\",\"regions\":[{\"name\":\"Washington\",\"climate\":\"temperate\",\"altitude\":{\"min\":500,\"max\":1500,\"unit\":\"m\"}},{\"name\":\"California\",\"climate\":\"mediterranean\"}],\"certifications\":{\"organic\":true,\"gmoFree\":true}}",      "varieties": [        {          "id": "apple_var_01",          "name": "Fuji",          "color": "red",          "taste": "sweet",          "season": {            "start": "October",            "end": "March"          }        },      ]     }   ]  // ... ...}

5. 最佳实践 - 专业级调试工作流

看到这里,我相信大家都知道如何使用这个插件了,但是我也多几句。

对于前端开发,比如后端部署还没有完成,我们前端可以直接拦截掉某条消息,然后在模拟控制台中编辑(比如 GIF 中,把USA的字段改为了CHINA),然后再模拟发送回来,这样就可以独立于后端进行测试。对于一些需要测试的边界条件,我们也可以在模拟控制台中编辑,然后模拟发送回来,或者发送出去

对于后端开发,同样的,也可以利用这个在产线环境,进行模拟测试,修改前端的输入来 Debug ,调试刚刚部署好的后端逻辑。总之用处多多

实际演示


6. 收藏功能 - 调试效率神器

那么基于上述功能,我想到或许某些很复杂的、常用的消息,可以收藏起来,然后直接发送。那么自然,我们的 收藏 功能就孕育而出。

收藏 功能中,每条消息都是可以被快速模拟发送、模拟接收的,且可以二次编辑,直接看演示

实际演示


7. 系统事件 - 连接状态一手掌握

Network 面板没有对于 系统事件 的监控和调试,现在我们有了一个更专业的面板来展示。里面可以“模拟”掉 客户端的事件 + 服务端的事件。

在演示里面,我完成了两次 Close 操作,一次是在模拟控制台使用客户端关闭事件 1000,一次是在连接实例处,点击关闭开关完成。

实际演示

因为插件是在 JS 层进行的 中间人拦截,那么 JS 感知不到的系统事件,我们同样也无法感知。至于为什么在 JS 层拦截,是因为CDP (Chrome DevTools Protocol)这层没有暴露拦截修改的能力。具体的实现原理可以见下面的 技术原理 章节

总之,目前只有 close 1000 或者大于 3000 的自定义事件,可以被真实发送给服务端,而服务端的 error 等事件,也是通过 onError 等来触发的

8. 手动建联 - 这原来也是一个 WebSocket Client

其实大家看到所有调试的功能也具备了,那么此时,我们只需要增加一个手动建联的功能,那么我们就可以把其当作一个 WebSocket 客户端来使用。另外已经支持了记录最近 3 次使用的 WebSocket地址,可以一键触达创建连接。

实际演示

三、快速安装

这个其实大家都会哈,但是为了凑一个章节,还是放在这里

    Chrome 商店安装

      访问 Chrome Web Store ( Edge 也可用)点击“添加至 Chrome”确认安装

    启用扩展

      打开任意网页按 F12 打开开发者工具找到 WebSocket DevTools 标签页

四、技术原理

核心实现,在 JS 层做了一次中间人拦截,直接把 new WebSocket 进行了一个替换劫持,这样真实的 WS 做的任何事,只要 JS 层可以感知的,我们都可以感知到,并且转发出去。核心方向确定了,剩下就是事件在 Chrome 插件系统中不同 Context 之间的传递事件的问题了。接着,在此基础上,建构了用户友好的 UI 和功能,比起技术实现,在我这里用户友好是最重要的

其他更多的功能,可以直接访问 GitHub

也可以直接访问 DeepWiki,里面有详细的架构实现,上面的架构图也是出自 DeepWiki

五、写在最后

想到这个需求,是因为我们业务重度依赖 WebSocket,那自然上面任何一个痛点我都经历过。我当时最希望的是可以 嵌套解析,可惜每次都需要复制到第三方才能完成。后来在查线上问题的时候,我希望可以模拟后端消息,不然整个 Bug 难以复线,但是我做不到。

还有很多啦,总之,所以这个需求不是 凭空出现 的,是基于我自己的实际需求。然后我花了很多时间把整个产品的 UI 做了个人喜好的偏向,终于完成了。最后,特别是把其作为一个 完整的产品 发布( Chrome Web Store 、官网、Github 、视频教程)这整个过程还是挺有意思的

感谢各位看到这里,如果觉得这个插件对你有帮助,欢迎给个 Star 或者五星支持一下,也欢迎大家提意见,谢谢

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

WebSocket 调试工具 浏览器插件 前端开发 网络监控
相关文章