所以我們試圖實現的是保持從移動設備到我們的Erlang HTTP服務器的大量併發連接。移動設備當然可能有非常間歇性的連接,所以我們希望儘快放棄無用的連接,以避免它們的開銷。丟失連接後儘快丟棄流HTTP連接
現在,我不確定應該在什麼級別檢測死連接。 TCP有keepalive數據包,它需要一個ACK。所以理想情況下,我們會在15秒內發送一個Keepalive數據包,如果我們在接下來的15秒內沒有收到ACK,那麼我們會斷開連接。但是,我不知道這在Erlang中甚至是可能的。另外,我認爲有些NAT,Wi-Fi路由器和移動網絡可能會在一段時間內確認Keepalive,如果我錯了,請糾正我的錯誤。是這樣的,如果是的話,是否有任何TCP級別的替代方式來做'心跳'?
我們還嘗試了應用程序級心跳 - 在HTTP流下發送\ n。但是,即使設置了所有適用的Erlang選項(包括send_timeout),在某些情況下(例如,移動設備偏離其Wi-Fi路由器太遠),我們在約5分鐘內也沒有發生任何錯誤。
如何最好地實現流式HTTP連接,服務器在失去聯繫後儘快掉線?任何幫助將不勝感激!
若不是HTTP我只是建議發送來自客戶端的東西。您是使用現成的HTTP服務器還是編寫自定義的服務器? – 2012-02-23 18:28:59
你不能在機器級配置套接字保持活動超時嗎? – Isac 2012-02-23 18:47:45
@asaddude我們編寫了自己的HTTP服務器。如果可能的話,我們希望堅持使用HTTP,並且在請求之後不做任何雙向的東西。 – Max 2012-02-23 19:26:25