2015-06-18 13 views
9

Ho uno script Node.js che utilizza websockets (socket.io). Lo script è in esecuzione sul mio computer (ad esempio, l'ambiente del server locale) e eseguo anche test tramite browser sul mio computer. Sto cercando di gestire con garbo disconnessioni e riconnessioni. Finora ho emulato disturbi di rete disabilitando/abilitando il WiFi sul mio iPad. E 'possibile disabilitare e riprendere la connessione web socket del browser sul mio computer locale, vale a dire tramite un plug-in del browser, un software proxy di terze parti o qualche altro strumento?È possibile disabilitare temporaneamente una connessione websocket in un ambiente server locale?


Così tariffa ho provato:

  • strumento di sviluppo Chrome: nella sua modalità dispositivo c'è un Networks Condizionioption, che mi permette di emulare i vari connettività di rete. Sfortunatamente at this point in time si applica solo alle connessioni HTTP e non alle connessioni websocket.
  • Charles: Registra le connessioni Websocket, ma non le limita. (Ho impostato la larghezza di banda, l'utilizzo e MTU a zero, ma continuo a ricevere risposte attraverso la connessione websocket).
  • Fiddler: Analogamente registra le connessioni Websocket, ma non le blocca.
+0

Questione molto importante. Lo stesso problema qui. –

+0

in firefox, è possibile selezionare "Lavora offline", ma non sono sicuro al 100% che si applica ai socket. potresti anche essere in grado di utilizzare un firewall per bloccare/sbloccare la porta. – dandavis

risposta

1

Eseguire il browser con argomenti speciali:

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

Questo metodo non funziona più. –

4

si può provare a sovraccaricare l'oggetto WebSocket. È un tipo di sporco, ma puoi catturare quando il websocket sta cercando di essere creato e creare ritardi o altro. Non l'ho testato, ma dovrebbe essere valido. O forse sovraccaricare i metodi WS stessi per interrompere quando i dati vengono inviati o ricevuti.

 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

Ho appena eliminato un piccolo bug: Console.log()/console.log(). Amo questo script, l'ho usato come base per il mio websocket personalizzato blocca bloccanti nel mio browser utilizzando la funzione utente javascript/greasemonkey. – Tyler

+0

@Tyler è contento che sia stato utile. Sicuramente potrebbe essere ottimizzato; questo è stato un esempio rapido e sporco. – user3661841

1

è possibile utilizzare un proxy semplice tcp come tcp-proxy, e semplicemente chiudere il proxy per terminare la connessione WebSocket.

Problemi correlati