2015-08-17 26 views
7

Stworzyłem websocket PHP używając Ratchet. Ten Websocket działa na porcie 8080 mojego wewnętrznego serwera 10.0.4.160.Nie można połączyć się z websocketem

Próbuję połączyć się z nim ze strony internetowej, na której włączono protokół SSL "używając protokołu https".

Podczas próby połączenia się z websemocket z przeglądarki FireFox, otrzymuję problemy bezpieczeństwa z przeglądarki, ponieważ miksuję połączenie zabezpieczone/niezabezpieczone. To jest błąd, który widzę w konsoli javascript.

SecurityError: The operation is insecure.

Aby rozwiązać ten problem zabezpieczeń utworzonego stunnel proxy, który pozwala mi zaakceptować połączenie na 10.0.4.160:58443 i podłączyć go do portu 127.0.0.1:8080. Ten bezpieczny tunel powinien pozwolić mi zachować połączenie z zabezpieczonym websocket i ominąć kontrolę bezpieczeństwa przeglądarki.

Jednak za każdym razem staram się połączyć z websocket pojawia się błąd

WebSocket connection to 'wss://10.0.4.160:58443/' failed: Error in connection establishment: net::ERR_TIMED_OUT

ten skrypt jQuery, który jest używany do łączenia się z websocket

<script> 

    $(function(){ 
     if ("WebSocket" in window) 
     { 
      var conn = new WebSocket('wss://10.0.4.160:58443'); 

      conn.onopen = function(e) { 
       console.log("Connection established!"); 
       showMessage('Connected', 0); 
      }; 

      conn.onmessage = function(e) { 
       console.log(e.data); 
       showMessage(e.data, 1); 
      }; 

      conn.onclose = function(e) { 
       console.log(e.code); 
       console.log(e.reason); 
      };    

      conn.onerror = function(e) { 
       console.log(e); 
      };  

     } else { 
      console.log('Your browser does not support Websocket!'); 
     } 

     function showMessage(msg, append){ 
      if(append){ 
       $('#status').append('<br>' + msg); 
       return; 
      } 

      $('#status').text(msg); 
     } 
    }); 

</script> 

Oto mój obecny Konfiguracja stunneli

[websockets] 
client = yes 
accept = 58443 
connect = 8080 
verify = 2 
CAfile = ca-certs.pem 
debug = 7 
OCSPaia = yes 

Jak mogę połączyć się z websocketem z przeglądarki? Dziękuję

+0

Głosowanie w dół, aż zobaczymy, że twój serwer PHP jest skonfigurowany za pomocą mechanizmu zapadkowego –

Odpowiedz

1

czytaj więcej o html5 WebSockets na http://www.html5rocks.com/en/tutorials/websockets/basics/

Socket.io to popularna biblioteka websocket przeczytać więcej na www.socket.io

Nie ma wystarczająco dużo informacji, aby zdiagnozować problem. Podaj dziennik serwera.

  • Czy twój serwer rozpoznaje próbę połączenia?
  • Czy Twój serwer obsługuje uzgadnianie serwera klienta?

Jeśli serwer rozpozna próbę połączenia, problem jest bardziej prawdopodobny niż uścisk dłoni. Nie ma problemu z twoim JavaScriptem.


Dodatkowe informacje:

inny rodzaj połączenia: (będziemy nazywać ten typ 1)

|SERVER(PHP)| <--- CONNECTION --> |SERVER(websocket)| 

co używasz: (będziemy nazywać ten typ 2)

|BROWSER(client)| <----CONNECTION --> |SERVER(websocket)| 

przy użyciu typ 1 połączenia jako typu 2 połączenia ryzykują przepełnienie głównego serwera WWW, który spowoduje poważne problemy z wydajnością. Host sieciowy: GoDaddy, Hostgator .. ect ..zakończy połączenia, które zalewają ich serwery, ponieważ są postrzegane jako ataki DDoS.

Nie wiem, co to jest grzechotka, ale aby zachować połączenie z serwerem klienta &, PHP musi pozostać otwarte & to NIGDY NIGDY NIGDY NIE KAŻDY dobry pomysł. Zajrzyj do stworzonego serwera w językach takich jak C# lub C++.