1. 最近在開發erlang服務器端的代碼時,使用{active, N}選項,能夠檢測到網絡主動斷開。可是客戶端拔掉網線或者禁用網絡,這個服務器端代碼沒有辦法檢測到。另外這個時候,服務器端給客戶端發送數據,服務器端能顯示發送成功,但實際上,這數據已經沒法送達了。因此,除了心跳包外,必須帶有超時機制。html
查了一下,這個是因爲物理層已經斷開了,但tcp傳輸層沒有發現致使的。android
參考:What happens to TCP connections when I remove the ethernet cable?數據庫
Howto detect that a network cable has been unplugged in a TCP connection?編程
在以TCP爲鏈接方式的服務器中,爲何在服務端設計當中須要考慮心跳?服務器
inet:getstat/2的用處(感受使用{active, N}選項後,這個沒有什麼做用,但能夠了解一下。)微信
2. 移動客戶端在切換到後臺,網絡可能會被禁用,這個時候要根據系統平臺來開啓網絡心跳包。網絡
iOS 和 Android 的後臺推送原理各是什麼?有什麼區別?socket
3.能夠查看erlang的郵件列表,能夠查看到具體的代碼演示:
Problem detecting interrupted TCP Connection
4.在分佈式環境中,咱們也必須添加網絡失敗的狀況檢測,尤爲是分佈式數據庫中著名的腦裂問題。這裏能夠提供一個erlang模擬網絡失敗的博客: