考慮到我們的設置中只涉及Windows和Linux計算機,爲什麼我應該使用應用程序級別的心跳而不是TCP Keepalive來檢測舊連接?應用程序級別更適合TCP Keepalive嗎?
回答
看來,TCP keepalive參數不能在Windows或OSX上以每個套接字爲基礎進行設置,這就是爲什麼。
編輯:除了保活重傳可以其實在Windows(2000年起)設置數量所有參數太多:http://msdn.microsoft.com/en-us/library/windows/desktop/dd877220%28v=vs.85%29.aspx
我試圖用zeromq要做到這一點,但它只是似乎zeromq不支持Windows?
從約翰·傑弗里斯響應:ZMQ Pattern Dealer/Router HeartBeating
「心跳沒有必要保持連接(沒有用於TCP套接字ZMQ_TCP_KEEPALIVE套接字選項)相反,需要雙方心跳知道對方。方仍然活躍,如果任何一方確實發現另一方不活躍,則可採取其他行動。「
TCP keepalive提供與應用程序級別心跳完全不同的功能。 Keepalive就是這樣做的,它保持TCP會話處於活動狀態,而不是讓它在長時間的靜默之後超時。這非常重要,並且(如果適用)您應該在應用程序中使用它。但是由於不活動而導致TCP會話的死亡只是連接在一對ZMQ套接字之間斷開的一種方式。一個端點可能會在90分鐘內失去電源並處於脫機狀態,TCP Keepalive在這種情況下不會執行蹲點。
應用程序級別的心跳是而不是旨在保持TCP會話處於活動狀態,並希望在可能的情況下依靠該功能的keepalive。心跳是在那裏告訴你的應用程序,連接實際上仍然是活動的,對等套接字仍然正常工作。這會告訴你,你的同伴無法使用,因此你可以做出相應的表現,通過高速緩存消息,拋出一個異常,發出警報,等等等等等等
簡而言之:
- 一個TCP保持活動旨在保持連接(但並不能防止所有斷開的情況)
- 應用級的心跳旨在告訴你的應用程序如果的連接是否處於活動
我想不同意。你說,如果一個端點在90分鐘內斷電,TCP keepalive不會蹲下嗎?那將是怎麼回事,因爲離線端點將不再響應TCP keepalive,連接將被視爲死亡。這正是我使用TCP Keepalive的場景,並且它非常完美。 –
你強迫我做一些閱讀 - 我只用Keepalive來避免空閒超時,但看到它*旨在實際提供斷開連接的信息(如果它們也發生的話)。也就是說,答案仍然是ZMQ *不使用TCP keepalives的這個特性,*不*爲應用程序提供斷開連接事件數據,所以它被減少*僅僅執行它防止閒置的角色。這是設計師的一個有意識的決定,他們的推理歸結爲他們抽象的一個目標是使斷開連接和重新連接更加無縫。 – Jason
是的,底層的TCP連接會死掉,但ømq流會保持連接狀態。這正是我在這之後所做的。但是,ømq4.0爲應用程序提供了檢測傳輸級別斷開並對其作出反應的方法。像IRC這樣的協議實現協議級心跳,而不是使用TCP保持活動。這讓我有些困惑。 –
- 1. 如何在應用程序中處理TCP keepalive
- 2. MongoDb適合我的應用程序嗎?
- 3. C++適合我的應用程序嗎?
- 4. CakePHP更適合大型Web應用程序嗎?
- 5. tcp keepalive - 協議不可用?
- 6. 在應用程序級別
- 7. 在應用程序級別
- 8. KeepAlive與WCF和TCP?
- 9. 哪個Thread方法更適合Keepalive線程?
- 10. android:theme =「@ android:style/Theme.NoTitleBar.Fullscreen」適用於應用程序級別,但不適用於活動級別。任何線索?
- 11. 實體框架 - 適用於企業級應用程序嗎?
- 12. Lua腳本適合開發移動企業級應用程序嗎?
- 13. Android線程是應用程序級別還是活動級別?
- 14. Quova TCP Keepalive?流水線?
- 15. 在MAC上捲曲TCP keepalive
- 16. 如何關閉TCP Keepalive?
- 17. Android應用程序或活動可以在更高API級別調用API嗎?
- 18. 在對象級別或應用程序級別使用setlocale
- 19. iPod音量級別影響應用程序音量級別
- 20. 任何應用程序級別的線程更新進度WPF
- 21. IMAP適合用於應用程序郵件服務器嗎?
- 22. Umbraco適用於LOB應用程序嗎?
- 23. System.Web.Cache,會話級別或應用程序級別
- 24. ASP.NET應用程序級別與會話級別和Global.asax ... confused
- 25. TCP Keepalive的典型用法是什麼?
- 26. iPhone下載應用程序的級別
- 27. 在應用程序級別分片
- 28. 應用程序日誌級別
- 29. 應用程序未指定API級別
- 30. 在應用程序級別指定NumberFormat
不確定你在問什麼,更多信息? – raffian
如何檢測到連接已過時?意思是,它不再連接到另一端(但沒有收到RST數據包)。 ZeroMQ文檔詳細介紹了應用程序級技巧來克服這個問題,但我不明白爲什麼在套接字級上設置TCP keepalive選項是不夠的。 –