「長連線」的基本含義是長時間保持客戶端和伺服器之間的連線狀態,在長連線模式下,一旦進行accept()操作成功之後,客戶端需要持續不斷的傳送訊息,相對應的,伺服器端需要持續不斷的接收訊息。再者來說,長連線是指,在乙個tcp連線上可以持續傳送多個資料報,在tcp連線期間,就算此時沒有訊息的傳送,他這個tcp連線也不會斷開,會一直維持連線的狀態。
基於上面對「長連線」的了解,接下來解釋「短連線」的相關知識:
與「長連線」相對應,「短連線」是指,短期內維持客戶端和伺服器之間的連線狀態,當通訊雙方存在資訊的互動時,就建立乙個tcp連線,基於這個連線進行資訊的收發,一旦資訊的互動完成時,tcp連線就會斷開,並不是一直存在,這種模式叫做「短」連線。
在「短連線」模式下,客戶端需要維持乙個執行緒去持續不斷的偵聽伺服器端的訊息響應,為了對客戶端進行更好的管理,可以把發出連線請求的客戶端都放到乙個公有的容器(池子)中。伺服器端並不需要維持乙個執行緒去接收對端的訊息,它是通過「輪詢」的方式在容器中檢視哪個客戶端發出了訊息「請求」,進而啟用乙個執行緒專門處理客戶端發過來的訊息,並將處理結果作為「響應」返回給客戶端。
用以上這種方式處理客戶端和伺服器之間的通訊,需要考慮乙個很重要的問題:這個共有的容器肯定是有一定的容量,不可能無境止地容載大量的客戶端進入,萬一容器「滿」了怎麼辦,該怎麼去保證新來的客戶端能夠順利進入容器?
在這裡給出一種解決方法——換入換出,
下面詳細來解釋這種方法。為了保證客戶端進入容器,需要每隔一段時間對容器中存在的客戶端進行淘汰。那麼,淘汰的原則呢?自然是需要把那些一直不傳送請求,也就是活躍度很低的客戶端從容器中「踢」出去,不能讓那些長時間不「說話」的客戶端在容器中佔地方。淘汰的方法是。給進入容器的每乙個客戶端設定乙個計數器,每次有客戶端傳送請求時,就給容器中除這個之外的其他客戶端計數加1,。如果某乙個客戶端一直不傳送請求,那它每一次別的客戶端傳送請求時,它都需要給自身加1,一段時間之後,這個客戶端的計數值肯定是最大的,自然就需要淘汰裡面計數最大的。根據這種淘汰方法就可以保證新來的客戶端可以順利的進入容器,而不關心容器的容量。
客戶端方面:
首先檢視「連線」情況,判斷是否存在已有連線;若已經存在連線,則相當於完成了「連線」操作,(這種情況是通過「輪詢」在容器中檢視連線情況);若不存在連線,需要進行accept()操作對伺服器發出連線請求進行真正的「連線」。
連線成功之後,接著是傳送請求,等待伺服器端的「響應」。
在這涉及到了「同步」和「非同步」兩種模式:
(同步)客戶端發出請求後,需要等待伺服器返回的響應結果,在這個等待過程中,客戶端不能再進行其他的任何操作,也稱為「阻塞模式」,只有在客戶端接收到伺服器返回的響應結果後,對返回結果進行處理,才可以繼續進行下一步的操作。
(非同步)客戶端發出請求後,開啟(啟用)乙個專門的執行緒去偵聽伺服器的響應返回結果,此時這種情況就相當於完成了本次會話,實現了「偽斷開連線」,客戶端本身不需要等待伺服器的響應,還是可以繼續進行後續的服務操作。
前面提到的「偽斷開連線」從嚴格意義上來說,並不是真正的「短連線」,要實現真正的斷開連線,大多是在進行「換入換出」操作的過程中,客戶端被迫斷開了與伺服器之間的連線。客戶端上述的一系列過程是乙個整體的執行緒,這個執行緒並不是一直存在的。只要客戶端向伺服器發出乙個請求,就開啟這個整體執行緒從檢查連線開始進行,同時需要開啟乙個子執行緒去偵聽伺服器的響應結果。這兩個執行緒是「主幹」和「分支」的關係,分支執行緒的運**況並不會影響主幹線程的執行。
伺服器方面:
首先要明確的是,伺服器並不會主動的給客戶端傳送訊息,因為伺服器不清楚存在哪些客戶端,也不知道在未來哪個客戶端會發出請求,而且同乙個伺服器可以允許多個客戶端同時連線,有那麼多的客戶端上線,伺服器不可能乙個乙個對客戶端進行「詢問」。
站在伺服器的角度來說,客戶端發出的請求是「相同」的,伺服器不區分發出請求的客戶端,也不去判斷本次發出請求的客戶端是否是上一次已經傳送過請求的同乙個客戶端,伺服器並不關心傳送請求的客戶端,也就是說,伺服器不能預知客戶端的狀況。所以,伺服器只是針對已經在容器中的客戶端進行「輪詢」操作,去檢視哪個客戶端發出了請求,進而接收請求進行處理,並把處理結果作為「響應」返回給客戶端。 相比客戶端來說,伺服器所要做的事比客戶端簡單一些。
HTTP學習(四)短連線和長連線
短連線 每次http請求都會建立tcp連線,管理容易 長連線 只需要建立一次tcp連線,以後http請求重複使用同乙個tcp連線,管理難 http1.1規定了預設保持長連線 http persistent connection 也有翻譯為持久連線 資料傳輸完成了保持tcp連線不斷開 不發rst包 不...
HTTP的長連線和短連線
http的長連線和短連線本質上是tcp長連線和短連線。http屬於應用層協議.短連線 瀏覽器和伺服器每進行一次http操作,就建立一次連線,但任務結束就中斷連線。長連線 當乙個網頁開啟完成後,客戶端和伺服器之間用於傳輸http資料的 tcp連線不會關閉,如果客戶端再次訪問這個伺服器上的網頁,會繼續使...
TCP的長連線和短連線
tcp ip是個協議組,可分為三個層次 網路層 傳輸層和應用層。在網路層有ip協議 icmp協議 arp協議 rarp協議和bootp協議。在傳輸層中有tcp協議與udp協議。在應用層有ftp http telnet smtp dns等協議。通常的短連線操作步驟是 連線 資料傳輸 關閉連線 而長連線...