2015-06-18 14 views
9

Tôi có tập lệnh Node.js sử dụng websockets (socket.io). Tập lệnh đang chạy trên máy tính của tôi (ví dụ: môi trường máy chủ cục bộ) và tôi cũng kiểm tra thông qua trình duyệt trên máy tính của tôi. Tôi đang cố gắng xử lý ngắt kết nối và kết nối lại một cách duyên dáng. Cho đến nay tôi đã giả lập nhiễu loạn mạng bằng cách vô hiệu hóa/kích hoạt WiFi trên iPad của tôi. Có thể tắt và tiếp tục kết nối socket web của trình duyệt trên máy cục bộ của tôi, tức là thông qua plugin trình duyệt, phần mềm proxy của bên thứ ba hoặc một số công cụ khác không?Có thể tạm thời vô hiệu hóa kết nối ổ cắm web trong môi trường máy chủ cục bộ không?


Vì vậy, giá vé tôi đã cố gắng:

  • công cụ nhà phát triển Chrome: Trong báo cáo Chế độ Device có một Networks Điều kiệnoption, cho phép tôi bắt chước khả năng kết nối mạng khác nhau. Thật không may at this point in time nó chỉ áp dụng cho các kết nối HTTP và không áp dụng cho các kết nối websocket.
  • Charles: Nó ghi lại các kết nối websocket, nhưng không điều chỉnh chúng. (Tôi đã thiết lập băng thông, sử dụng và MTU bằng không, nhưng vẫn nhận được phản hồi máng kết nối websocket).
  • Fiddler: Tương tự ghi lại các kết nối websocket, nhưng không chặn chúng.
+0

Câu hỏi rất quan trọng. Cùng một vấn đề ở đây. –

+0

trong firefox, bạn có thể kiểm tra "Làm việc ngoại tuyến", nhưng tôi không chắc chắn 100% áp dụng cho ổ cắm. bạn cũng có thể sử dụng tường lửa để chặn/mở khóa cổng. – dandavis

Trả lời

1

Execute trình duyệt với lý lẽ đặc biệt:

chrome.exe --disable-web-sockets 
+0

Phương pháp này không còn hoạt động nữa. –

4

Bạn có thể thử quá tải đối tượng WebSocket. Loại bẩn của nó, nhưng bạn có thể nắm bắt khi websocket đang cố gắng được tạo ra và tạo ra sự chậm trễ hoặc bất cứ điều gì. Tôi đã thử nghiệm nó, nhưng nó phải là âm thanh. Hoặc có thể quá tải các phương thức WS để ngắt khi dữ liệu được gửi hoặc nhận.

 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; 
+0

Tôi vừa sửa một lỗi nhỏ: Console.log()/console.log(). Yêu kịch bản này, tôi đã sử dụng nó làm cơ sở cho trình chặn websocket tùy chỉnh của tôi chặn trình duyệt trong trình duyệt của tôi bằng cách sử dụng tính năng javascript/greasemonkey của người dùng. – Tyler

+0

@Tyler Vui vì nó hữu ích. Nó chắc chắn có thể được tối ưu hóa; đây là một ví dụ nhanh chóng và bẩn thỉu. – user3661841

1

Bạn có thể sử dụng một proxy tcp đơn giản như tcp-proxy, và chỉ cần đóng proxy để chấm dứt kết nối WebSocket.

Các vấn đề liên quan