2011-08-10 14 views
11

muszę korzystać jsonp-odpytywanie dla IE i XHR-odpytywanie dla Firefoksa, więc próbował definiować rodzaje transportów po stronie klienta jak ten:Definiowanie rodzajów transportu po stronie klienta

if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits); 
      var socket = io.connect(VG.NODE_SERVER_URL,{ 
        transports:['xhr-polling'] 
      }); 
    } else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ 
      var socket = io.connect(VG.NODE_SERVER_URL,{ 
        transports:['jsonp-polling'] 
      }); 
    } else { 
      var socket = io.connect(VG.NODE_SERVER_URL); 
    } 

Przetestowałem go w Firefoksie i dodałem logowanie do biblioteki socket.io-client. At

https://github.com/LearnBoost/socket.io-client/blob/master/dist/socket.io.js#L1509

się option.transports jest ["xhr-polling", "flashsocket", "htmlfile", "xhr-polling", "jsonp-polling"], co jest słuszne. Jednak w

https://github.com/LearnBoost/socket.io-client/blob/master/dist/socket.io.js#L1679

nie wiem dlaczego transporty zmienić ["htmlfile", "jsonp- polling", "xhr-polling"], który ma taką samą sekwencję jak co ja zdefiniowane po stronie serwera.

Dlaczego nie korzysta z poprzedniej opcji?

+0

Nie masz pewności, na czym polega pytanie, czy podana sekwencja - 'xhr-polling', itp., Jest zignorowana, a zamiast tego' htmlfile' idzie pierwsza? Czy ten problem jest replikowany przy użyciu pliku socket.io '0.8.7'? –

+0

Dziękuję za twoje pytanie! To była odpowiedź na mój koszmar z FireFox. Dokumentacja Socket.io jest bardzo zła. To jedyne miejsce, w którym znalazłem opcje transportu. :) –

Odpowiedz

18

Błąd został poprawiony w wersji 0.9.6 socket.io, mogę to wykorzystać i to działa porządku:

socket = io.connect(HOST_REMOTE, { 
    transports: ['xhr-polling'] 
}); 

W wersji 1.0.0 i powyżej:

socket = io.connect(HOST_REMOTE, { 
    transports: ['polling'] 
}); 
+2

Obecne źródło (1.3.3) wydaje się teraz używać "odpytywania" zamiast "xhr-polling". –

+0

jeśli używamy xhr-polling i polling dla connet ios, android i html5, to może on stworzyć każdy problem, jak rozłączyć gniazdo w dowolnym momencie lub w inny sposób? –

1

Występuje błąd w pliku socket.io.client.

więc nie można ustawić w kliencie transportów ...

function Socket (options) { 
this.options = { 
    port: 80 
    , secure: false 
.... 
}; 

io.util.merge(this.options, options); 
.... 
}; 

powinny być io.util.merge(this.options, options,0);....

Powiązane problemy