首頁>Club>
我對長連線的理解是,客戶端個服務端各自啟動一個執行緒,分別儲存對方的地址與埠號,每隔一段時間發一次心跳包給對方,如果收到對方響應,則維持執行緒,如果沒收到響應,就關閉執行緒過使執行緒睡眠。所以最後的結論是:長連線=長執行緒+socket。這個理解對嗎?
7
回覆列表
  • 1 # 會點程式碼的大叔
    長連線、短連線的定義

    長連線:建立好連線後,不關閉連線,一直保持通訊狀態,當後續再有資料需要傳輸的時候,就已經建立好的連線即可。優點是節省建立連線和關閉連線的開銷,缺點是要一直維護這個連線。

    短連線:每次資料傳輸的時候,都需要建立一個新的連線,資料傳輸完就關閉連線。

    長連線的實質/實現

    長連線的實質,我也在考慮怎麼說比較合適,題主問題中的描述,我覺得叫做長連線的實現比較合適(Socket本質是程式設計介面API,對TCP/IP的封裝,它本身不是協議)。

    理解這個問題,首要要了解下TCP/IP模型,我們主要看傳輸層和應用層。

    傳輸層包含我們最常見的:TCP、UDP。

    應用層常見的:Http、Https、SMTP、FTP等等,很多。

    Socket和TCP/IP沒啥實質關係,它就是對TCP/IP進行了抽象和封裝,形成了函式介面,程式設計師使用起來很方便。

    我們常說的長連線,通常是指傳輸層的使用TCP協議經過三次握手建立的連線。

    心跳是保持長連線的手段,在TCP中,就是KeepAlive機制。

    長連線使用什麼協議?肯定是TCP協議,應用層的協議也都以此為基礎。Http也支援長連線,但是Http只是應用層協議,傳輸層依然是TCP。

    長連線的最佳化

    長連線最大的缺點,就是建立好連線之後,就要不斷地維護這個連線,並且長連線會加重伺服器的負擔。

    最佳化心跳機制,每次業務資料請求也看做一次心跳,減少無效的資料傳輸。

    根據場景,用短連線+輪詢的方式替代長連線。

    最佳化資料,必要時進行壓縮,減少網路壓力。

    有關長連線的實現方案,有些內容我還不是很確定,比如Apache Mina NIO、Netty NIO,後續我搞清楚了再和大家分享。

  • 中秋節和大豐收的關聯?
  • 網路機頂盒和寬頻送的機頂盒區別?