Socket之長連接、短連接

        最近,大家都在討論關於socket,談到根源,腦子裏還有很多模棱兩可的概念。所以上網蒐集了一點資料,加深一下理解,也希望大家能踊躍跟帖,發表一下自己的見解,把你們所理解的用通俗的語言跟上,共享一下哈,不勝感激!

        談到socket,大家談論比較多的還是關於長連接和短連接,何爲長連接,短連接呢?顧名思義,所謂長連接,指在一個連接上可以連續發送多個數據包,然後斷開連接,在連接保持期間,如果沒有數據包發送,需要雙方發鏈路檢測包。短連接是指通訊雙方有數據交互時,就建立一個連接,數據發送完成後,則斷開此連接,即每次連接只完成一項業務的發送。

        我們現在的程序中用的比較多的貌似就是長連接了,那麼怎麼才能保持長連接呢,經查資料得出,比較成熟的有兩種方法:

        第一種是在應用層制定協議,發心跳包,這也是C#,JAVA等高級語言比較常用的方法。客戶端和服務端制定一個通訊協議,每隔一定時間(一般15秒左右),由一方發起,向對方發送協議包;對方收到這個包後,按指定好的通訊協議回一個。若沒收到回覆,則判斷網絡出現問題,服務器可及時的斷開連接,客戶端也可以及時重連。

        第二種通過TCP協議層發送KeepAlive包。這個方法只需設置好你使用的TCP的KeepAlive項就好,其他的操作系統會幫你完成。操作系統會按時發送KeepAlive包,一發現網絡異常,馬上斷開。

        但是這兩種方法又各有什麼利弊呢?發KeepAlive包的好處,是我們在應用層不需自己定協議,通信的兩端,只要有一端設好這個值,兩邊都能及時檢測出TCP連接情況。而且這些都是操作系統幫你自動完成的。這種方法也是有些缺陷的,Keepalive設置不合理時可能會因爲短暫的網絡波動而斷開健康的TCP連接。

 

本文鏈接地址爲:http://blog.csdn.net/yisampi2009/article/details/6602919

發佈了66 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章