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

bon*_*nna 13 javascript debugging websocket socket.io

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


所以我试过的票价:

  • Chrome开发人员工具:在其设备模式中,有一个网络条件 选项,可让我模拟各种网络连接.不幸的是,此时它只适用于HTTP连接而不适用于websocket连接.
  • 查尔斯:它记录了websocket连接,但没有限制它们.(我已将带宽,利用率和MTU设置为零,但仍然通过websocket连接接收响应).
  • Fiddler:同样记录websocket连接,但不阻止它们.

use*_*841 5

您可以尝试重载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;
Run Code Online (Sandbox Code Playgroud)


小智 -2

使用特殊参数执行浏览器:

chrome.exe --disable-web-sockets
Run Code Online (Sandbox Code Playgroud)

  • 这似乎什么也没做 (6认同)