2010-10-19 62 views
2

我們有一個應用程序通過HTTP的長輪詢方案(儘管這個問題可能適用於任何基於TCP的協議)。我們的暫停時間相當長,30分鐘左右。持久的TCP連接,長時間的超時和IP跳頻移動設備

我們有時會看到,移動設備經常會每隔一分鐘左右從IP跳轉到IP,這會導致數十個長壽命的套接字堆積在服務器上。不禁覺得這比起需要造成更多的負擔。

所以我猜測,有些IP網關在關閉連接時比其他設備更好。我能想到的解決這個問題的策略是:

  • 減少超時(在設備上增加電池壽命)
  • 關閉最後一個活動連接,當用戶重新連接(需要Cookie或用戶ID追蹤)

其他?

回答

0

我會研究關閉最後一個活動連接使用cookie或某種形式的ID在你的服務器。是的,這是更多的工作,但只要用戶跳轉地址,就可以找到舊套接字並清理資源。綁定一個用戶名或類似的東西應該相當容易。

即使用戶設備沒有跳轉地址,某些移動網絡,也許你自己的網絡可能會遇到的另一個問題可能有一個狀態滿的防火牆,將清理未使用的套接字,這將導致連接問題一個新的連接將再次需要syn/syn-ack。如果您注意到連接問題,請記住這一點。

如果您決定玩弄保持活力,請不要過於激進,喋喋不休的應用程序是移動網絡的瘟疫,以及那些在與服務器失去連接時敲擊網絡的瘟疫可能導致各種問題對於網絡(如果運營商捕獲的話你也是如此)。至少有一種回退機制來重新連接,甚至可能試圖找出設備每分鐘切換IP地址的原因。如果它運作正常,不應該發生。

***我在加拿大的移動運營商工作,但是,我的意見並不反映我的僱主的立場。

+0

我有點擔心keepalives,因爲任何數據活動都會喚醒收音機 - 這就是爲什麼我將它設置爲30分鐘。不知道有什麼關於防火牆超時,也不會在服務器上很容易地注意到它:( – sehugg 2010-10-19 16:18:40

+0

@sehugg在您所在的網絡上,設備是否獲得公共IP地址?如果是這樣,我見過的一種方法當設備獲得IP地址,向服務器註冊,然後只是監聽未連接的連接,服務器連接到設備時,設備就會成功。但是,運營商並不十分支持這一點並可能會將其鎖定;另一種方法是向設備發送短信,並讓設備攔截短信以喚醒應用程序以執行某些操作。 – 2010-10-19 18:33:09

+0

我還沒有連接到設備的運氣 - 嘗試過一次使用UDP。現在我明白像Apple的APNS和Google的C2DM這樣的服務的價值了:) – sehugg 2010-10-20 11:41:44

0

如果可以,請打開套接字上的TCP keepalive,並給它們一個相當低的計時器(例如每隔1-5分鐘)。只要您從套接字中讀取數據,您就可以更快地檢測到無法訪問的對等體,並且減少手機資源佔用率,而不是減少30分鐘的應用程序超時時間。

+0

Keepalive會不會減少設備上的電池消耗,就像我們通過套接字發送數據一樣? – sehugg 2010-10-19 16:14:01

+0

是的,但不如在應用程序中處理它。 – nos 2010-10-19 16:49:12