1、TCP長鏈接
在編程中,每每須要創建一條TCP鏈接,並進行長時間的處理。所謂的TCP長鏈接並無確切的時間限制,而是說這條鏈接須要處理不僅一項事務,鏈接的時間也不能肯定。或者說只處理一項事務,但鏈接的時間比較長。
正常狀況下,一條TCP鏈接創建後,只要雙不提出關閉請求而且不出現異常狀況,這條鏈接是一直存在的,操做系統不會自動去關閉它,甚至通過物理網絡拓撲的改變以後仍然能夠使用。因此一條鏈接保持幾天、幾個月、幾年或者更長時間都有可能,只要不出現異常狀況或由用戶(應用層)主動關閉。
2、TCP鏈接的正常中斷
TCP鏈接在事務處理完畢以後,由一方提出關閉鏈接請求,雙方經過四次握手(創建鏈接是三次握手,固然能夠經過優化TCP/IP協議棧來減小握手的次數來提升性能,但這樣會造成不規範或者不優雅的通訊)來正常關閉鏈接
3、TCP鏈接的異常中斷
致使TCP鏈接異常中斷的因素以下:
物理鏈接被中斷
操做系統down機
程序崩潰
等等。
4、如何檢測TCP鏈接已經中斷
對於實時性要求較高的網絡通訊程序,每每須要更加及時的獲取已經中斷的鏈接,從而進行及時的處理。但若是對方的鏈接異常中斷,每每是不能及時的獲得對方鏈接已經中斷的信息,操做系統檢測鏈接是否中斷的時間間隔默認是比較長的,即使它可以檢測到,但卻不符合咱們的實時性需求,因此須要咱們進行手工去不斷探測。
探測的方式有兩種:
1、改變socket的keepalive選項,以使socket檢測鏈接是否中斷的時間間隔更小,以知足咱們的及時性需求。
2、在應用層使用heartbeat來主動檢測。
原文連接:http://blog.163.com/tianle_han/blog/static/6617826201023053857239/