2012-01-10 55 views
18

我使用node.js和socket.io。 我與socket.io的連接速度有問題。 在Internet Explorer和Opera中,我的連接速度有問題。 - 當我使用flashsocket或websocket。 當我在所有瀏覽器(IE,FF,Chrome,Opera)中使用傳輸輪詢XHR連接模式時速度很快。socket.io - XHR輪詢vs flashsocket和websocket

運輸方式-XHR-polling和flash/websocket有什麼區別? 什麼是最佳交通方式?如何優化連接速度是socket.io?

感謝您的建議!

回答

29

如果Web瀏覽器之間的連接速度一般不同,但我會驚訝的發現,但在Internet Explorer和Opera中初始連接延遲的原因是本機WebSocket支持不是因爲默認情況下它已被禁用。因此,如果您選擇FlashSocket,則在連接建立之前需要下載一個額外的Flash對象(SWF文件)。

WebSockets正在IE10和Opera中引入,它們可用,但默認情況下是禁用的。

運輸方式-XHR-polling和flash/websocket有什麼區別?

  • XHR輪詢 - 見http://en.wikipedia.org/wiki/Push_technology#Long_polling
  • FlashSocket連接 - 使用一個動畫Socket對象建立到網頁套接字服務器的連接,並使用WebSocket協議進行通信。這意味着Flash和JavaScript之間存在交互,也意味着需要下載一個額外的Flash對象(SWF文件)。

什麼是最佳運輸方式?

本機支持它的任何Web瀏覽器(Chrome,Firefox,Safari)的WebSockets。如果Flash對象(SWF文件)位於瀏覽器緩存中,則連接應該很快。如果不是,那麼會有延遲。 XHR長輪詢是一個很好的解決方案,將工作跨瀏覽器,但也有劣勢:

  • 調查請求之間展出的數據可能是過時(過時)的。
  • 它比由於HTTP長輪詢通過的WebSockets使用單個TCP連接的效率較低的連接方法使用多個連接來模擬雙向功能
  • HTTP已這意味着附加報頭信息的開銷在請求和每個隨後的發送請求。

如何優化連接速度是socket.io?

(我是很新,socket.io到這只是一個建議)

我看configuring Socket.io docs,看看你是否可以根據所連接的瀏覽器上有條件地設置transports 。根據您的經驗,這可能是:

  • 的Chrome,火狐,Safari瀏覽器 - 的WebSockets
  • IE,歌劇 - XHR-輪詢
+0

我可以設置在IE中flashsocket?它是否與IE瀏覽器兼容? – Jenan 2012-01-11 06:24:17

+1

@Jenan是的,只要安裝了Flash,FlashSocket應該在IE中工作。 – leggetter 2012-01-11 10:04:23

4

爲了減少連接的時間,你可以儘量減少使用「連接超時」參數連接超時(默認爲10秒)。

例如,要連接超時減少到1秒:

socket = io.connect('http://your-site.com',{'connect timeout': 1000});