当前位置: 首页 > 知识库问答 >
问题:

是否可以在本地服务器环境中暂时禁用websockets连接?

侯博裕
2023-03-14

我有一个使用网页套.js(socket.io)的节点脚本。该脚本在我的计算机上运行(例如本地服务器环境),我还通过计算机上的浏览器进行测试。我正在尝试优雅地处理断开连接和重新连接。到目前为止,我已经通过禁用/启用iPad上的WiFi来模拟网络干扰。是否可以在我的本地计算机上禁用和恢复浏览器的Web套接字连接,即通过浏览器插件,第三方代理软件或其他工具?

所以我尝试过:

  • Chrome开发工具:在其设备模式中有一个网络条件选项,允许我模拟各种网络连接。不幸的是,目前它只适用于HTTP连接,而不适用于websocket连接
  • 查尔斯:它会记录网络套接字连接,但不会对其进行节流。(我已将带宽、利用率和MTU设置为零,但仍通过网络套接字连接接收响应)
  • Fiddler:类似地记录网络套接字连接,但不会阻止它们

共有3个答案

解晟睿
2023-03-14

您可以使用一个简单的tcp代理,如tcp-agent,并简单地关闭代理以终止WebSocket连接。

欧阳昊焱
2023-03-14

在看到上面@user3661841的答案后,我创建了一个GreaseMonkey/TamperMonkey脚本,它将允许您以类似的方式禁用WebSockets。

以下是基于Chromium的浏览器(Chrome、Brave、Sidekick等)的说明。):

  1. 从Chrome商店下载TamperMonkey扩展
  2. 从GresyFork安装此脚本。默认情况下,安装此脚本将在您访问的每个站点上禁用WebSockets。如果您不想立即阻止WebSockets,请单击TamperMonkey图标和切换开关以禁用阻止。
  3. 当您想关闭WebSockets时,单击TamperMonkey图标和切换开关以启用阻塞。刷新页面。
  4. 当您不想再阻止WebSockets时禁用脚本。

以下是您要单击以禁用/启用WebSocket阻止的开关:

注意1:您应该能够在控制台中看到输出,标记尝试打开WebSocket连接但被阻止。

注意2:当您禁用WebSockets进行开发时,请确保禁用此选项。如果您只使用TamperMonkey来禁用WebSockets,那么您会希望您的TamperMonkey在大多数情况下都像这样:

当你想要阻止时,就像这样:

王航
2023-03-14

您可以尝试重载WebSocket对象。它有点脏,但您可以在websocket尝试创建时捕获并创建延迟或其他任何内容。我还没有测试过它,但它应该是健全的。或者可能会重载WS方法本身,以便在发送或接收数据时中断。

        var WebSocket2 = WebSocket;

        WebSocket = function(addy) {
            console.log('WS: Trying to open.');
            var ws;
            if (!this.blocked) {
                console.log('WS: Not blocked, allowing.');
                ws = new WebSocket2(addy);
                this.open_sockets.push(ws);
                return ws;
            } else {
                console.log('WS: Blocked.');
            }
        };

        WebSocket.toggle = function() {
            WebSocket.prototype.blocked = !WebSocket.prototype.blocked;
            var sockets = WebSocket.prototype.open_sockets;
            if (WebSocket.prototype.blocked) {
                console.log('WS: Blocking. Removing Old Sockets.');
                sockets.forEach(function(socket, index, sockets) {
                    console.log("WS: Closing -", index);
                    socket.close();
                });
                WebSocket.prototype.open_sockets = [];
                console.log("WS: Sockets left open -", WebSocket.prototype.open_sockets.length);
            } else {
                console.log("WS: Unblocking");
            }
        };

        WebSocket.prototype.open_sockets = [];
        WebSocket.prototype.blocked = false;
 类似资料:
  • 对于一些网站,当我按F12按钮看到html元素,什么都没发生。为什么啊?我通过ie和谷歌chrome测试它。有什么工具可以看到这个网站的元素和媒体吗?

  • 第一、装一个windows vm文件,苹果xcode、安卓adt就全有了!!! 第二、这个东西完全可以用作独立的xcode和adt开发环境,和X5无关,用起来很方便。 ————————————— “X5app开发特版Mac OS X 虚拟机系统“由起步X5开源app开发框架justep.com提供,Mac OS X 和Xcode版权归属苹果所有,Android ADT版权归Gioogle所有 。请

  • 问题内容: 我正在制作一个Web应用程序,该应用程序需要检查远程服务器是否在线。当我从命令行运行它时,我的页面加载将达到完整的60秒(对于8个条目,它将随着更多线性增长)。 我决定在用户​​端执行ping操作。这样,我可以加载页面并让他们在浏览内容时等待“服务器在线”数据。 如果有人对以上问题有答案,或者他们知道一种可以使我的页面快速加载的解决方案,我一定会很感激的。 问题答案: 我发现有人通过非

  • AppEngine/DataStore包的文档使用标准环境,而云包的文档使用flex环境。

  • 问题内容: 是否可以在tomcat的URL中关闭jsessionid?jsessionid似乎对搜索引擎不太友好。 问题答案: 你可以使用此过滤器仅对搜索引擎禁用,但我建议对所有响应都使用它,因为它比不友好的搜索引擎更糟糕。它公开了可用于某些安全漏洞的会话ID(更多信息)。 Tomcat 6(6.0.30之前的版本) 你可以使用tuckey重写过滤器。 Tuckey过滤器的示例配置: Tomcat

  • 问题内容: 我正在阅读有关Java中已检查和未检查的异常的文章,并找到此文章/链接:https : //projectlombok.org/disableCheckedExceptions.html 根据这篇文章,这只是为javac开发的黑客。 考虑下面的代码片段: 在这里我不得不写, 因为我试图打开一个文件。在这里,“ throws”子句是必须的。没有它,我会得到一个错误。如果我确定要打开的文件