2011-08-10 180 views
11

我需要使用JSONP輪詢的IE定義傳輸類型,以及XHR輪詢爲Firefox,所以我 試圖定義客戶端上這樣類型的傳輸方式:在客戶端

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); 
    } 

我在Firefox上測試了它,並在socket.io-client lib上添加了日誌記錄。 在

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

的option.transports是["xhr-polling", "flashsocket", "htmlfile", "xhr-polling", "jsonp-polling"],這是正確的。然而,在

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

我不知道爲什麼運輸改爲["htmlfile", "jsonp- polling", "xhr-polling"],具有相同的序列我 在服務器端定義。

爲什麼不使用前面的選項?

+0

不知道這裏的問題是,上面給出的序列 - 「xhr-polling」等被忽略,而是「htmlfile」先行?這個問題是否與socket.io'0.8.7'一起復制? –

+0

謝謝你的問題!這是我與FireFox惡夢的答案。 Socket.io文檔太糟糕了。這是我找到傳輸選項的唯一地方。 :) –

回答

18

現在的BUG在socket.io版本0.9.6,我可以用這個和它的作品細:

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

在版本1.0.0和以上:

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

當前(1.3.3)源似乎現在使用「輪詢」而不是「xhr-polling」。 –

+0

如果我們使用xhr輪詢和輪詢connet ios,android和html5,那麼它可以創建任何問題,如斷開連接socket任何時候或任何其他..? –

1

在socket.io.client中存在一個錯誤。

,所以你不能設置傳輸客戶端...

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

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

應該io.util.merge(this.options, options,0);....