2013-02-28 10 views
6

Wygląda na to, że potrzeba około 1 sekundy, aby skonfigurować połączenie internetowe, gdy klient i serwer działają lokalnie na moim komputerze. Wydaje mi się to dość długim czasem - prawda? Czy ktokolwiek mógłby to porównać z własnymi doświadczeniami?Konfiguracja połączenia z Websocket zajmuje stosunkowo dużo czasu - czy to normalne?


Szczegóły:

mam prośbę websocket jak to na kliencie (Chrome 25, Windows7 64):

this.ws = new WebSocket('ws://' + host + ':' + port);

Po stronie serwera mam node ExpressJS działające i einaros/ws obsługujące uaktualnienie i połączenie WS.

Jestem w kontakcie z klientem, od momentu tuż przed nowym WebSocket() do zdarzenia ws.onopen.

+0

jakiegoś powodu nie używaj Socket.io? –

+0

@ Jean-PhilippeLeclerc Tak, oceniłem kilka różnych bibliotek, dopasowaliśmy je lepiej. Jak jednak rozumiem, socket.io używa biblioteki ws pod maską (jest wymieniona jako zależność socket.io w npm). Dlaczego, widziałeś szybsze czasy instalacji z socket.io? – UpTheCreek

+0

Właściwie nie. Już miałem ten problem w jednym z moich projektów za pomocą socketio. To był trochę gówniany testowy projekt, więc tak naprawdę nie obchodziło mnie to. Nie mam tego problemu w moim nowym projekcie. Nadal nie mogę się doczekać odpowiedzi na twoje pytanie. –

Odpowiedz

1

To nie jest normalne.

używam Chrome 24 na Ubuntu z następującego kodu testowego (tylko odpalić konsolę Chrome Dev i wkleić go w):

function test_ws(uri){ 
    start = new Date().getTime(); 
    ws = new WebSocket(uri); 
    ws.onopen = function(){ 
     console.log("onopen of", uri, "in", (new Date().getTime() - start), "ms"); 
    }; 
} 

Oto średnie wyniki stałam się dla różnych wartości uri:

  • ws://localhost:6080: 20 ms (na zamówienie python oparte serwer websocket)
  • ws://localhost:6090: 3 ms (niestandardowe node.js + einaros/Web oparte ws Serwer gniazdo)
  • ws://echo.websocket.org: 130 ms
  • wss://echo.websocket.org: 190 ms

Więc nawet przy użyciu połączenie szyfrowane do publicznej zdalnym serwerze websocket jest wciąż mniej niż jedną piątą sekundy średnio aż otwartej imprezy . Maksymalny czas jaki widziałem to 250ms. W przypadku połączenia lokalnego opóźnienie powinno wynosić tylko kilka milisekund.

Moje przypuszczenie byłoby, że Ty konfiguracja serwera robi kilka przetwarzania przed odebraniem połączenia. Być może zainicjujesz kilka danych klienta w nowej procedurze obsługi połączenia?

Aktualizacja:

Oto prosty einaros/WS oparty serwer websocket że daje 3 ms onOpen odpowiedzi przy użyciu kodu testowego klient powyżej:

var WebSocketServer = require('ws').Server 
    , wss = new WebSocketServer({port: 6090}); 
wss.on('connection', function(ws) { 
    console.log("got connection"); 
}); 
+0

Dziękuję za tę odpowiedź - te czasy wyglądają bardziej jak bym się spodziewał. Obecnie uśredniam około 1100ms, a test jest identyczny z tobą. Interesujące, że przykład einaros/ws jest najszybszy (czyli biblioteka, której używam). Nie ma jawnej inicjalizacji danych klienta, ale myślę, że sprawdzę później ekspresową odzież sportową. W każdym razie ta informacja odnowiła mój entuzjazm, aby dotrzeć do sedna! :) Twoje zdrowie. – UpTheCreek

+0

Interesujące. Wystarczy podać dokładny kod - serwer i klienta (z konsoli dev), wynik: 'onopen ws: // localhost: 6090 in 1003 ms''! Myślę, że nie było wtedy ekspresowe. Więcej dochodzenia wymagane ... – UpTheCreek

+0

HectorCorrea hit coś w komentarzach powyżej - wydaje się, że przy użyciu "localhost" zamiast IP pętli zwrotnej wprowadza opóźnienie. Nie wiem, dlaczego jeszcze, lub dlaczego widzę coś podobnego na serwerze (trzeba sprawdzić dwukrotnie!). Doceń swoją pomoc w dotarciu do sedna tego! – UpTheCreek

6

znalazłem jasnej odpowiedzi na to pytanie . Wygląda na to, że użycie localhost powoduje, że przeglądarka próbuje najpierw połączyć się z ipv6, a następnie wycofać się po ipv4 po upływie 1 sekundy. Problem został rozwiązany przez użycie 127.0.0.1, ponieważ najpierw spróbuje połączyć się przy użyciu ipv4.

Source

+0

Ciekawe, dziękuję! – UpTheCreek

+0

4 lata później ... dziękuję – ThievingSix

Powiązane problemy