談到socket,大家談論比較多的還是關於長連接和短連接,何爲長連接,短連接呢?顧名思義,所謂長連接,指在一個連接上可以連續發送多個數據包,然後斷開連接,在連接保持期間,如果沒有數據包發送,需要雙方發鏈路檢測包。短連接是指通訊雙方有數據交互時,就建立一個連接,數據發送完成後,則斷開此連接,即每次連接只完成一項業務的發送。
我們現在的程序中用的比較多的貌似就是長連接了,那麼怎麼才能保持長連接呢,經查資料得出,比較成熟的有兩種方法:
第一種是在應用層制定協議,發心跳包,這也是C#,JAVA等高級語言比較常用的方法。客戶端和服務端制定一個通訊協議,每隔一定時間(一般15秒左右),由一方發起,向對方發送協議包;對方收到這個包後,按指定好的通訊協議回一個。若沒收到回覆,則判斷網絡出現問題,服務器可及時的斷開連接,客戶端也可以及時重連。
第二種通過TCP協議層發送KeepAlive包。這個方法只需設置好你使用的TCP的KeepAlive項就好,其他的操作系統會幫你完成。操作系統會按時發送KeepAlive包,一發現網絡異常,馬上斷開。
但是這兩種方法又各有什麼利弊呢?發KeepAlive包的好處,是我們在應用層不需自己定協議,通信的兩端,只要有一端設好這個值,兩邊都能及時檢測出TCP連接情況。而且這些都是操作系統幫你自動完成的。這種方法也是有些缺陷的,Keepalive設置不合理時可能會因爲短暫的網絡波動而斷開健康的TCP連接。
本文鏈接地址爲:http://blog.csdn.net/yisampi2009/article/details/6602919