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

我尝试过这样的票价:

  • Chrome开发人员工具:在其设备模式下,有一个网络条件option,它使我可以模拟各种网络连接。不幸的是at this point in time它仅适用于HTTP连接,不适用于websocket连接。
  • Charles:它记录websocket连接,但不限制它们。 (我已将带宽,利用率和MTU设置为零,但仍通过websocket连接接收到响应)。
  • Fiddler:类似地记录websocket连接,但不阻止它们。
  • 最佳答案

    您可以尝试重载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;
    

    07-25 23:50
    查看更多