电竞比分网-中国电竞赛事及体育赛事平台

分享

http,websocket和socket詳解

 和合德 2023-08-06 發(fā)布于江蘇

一,HTTP     

        1,概念:http是目前應用最廣泛的一個網絡傳輸協(xié)議,是屬于網絡應用層的面向對象的協(xié)議.

       1.1,HTTP1.1解決TCP3次握手4次揮手耗性能問題:

如果有大量的連接,每次在連接,關閉時都要經歷3次握手,4次揮手,這很顯然會造成性能低下.因此,HTTP1.1開始,默認采用持久連接,使用了一種叫做keepalive connections 的機制,它可以在傳輸數(shù)據(jù)后仍然保持連接,當客戶端再次獲取數(shù)據(jù)時,直接使用剛剛空閑下來的連接,而無需再次握手.低線路負載,提高傳輸速度.

      Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現(xiàn)長連接需要客戶端和服務端都支持長連接。

       1.2,HTTP協(xié)議的長連接和短連接,實質上是TCP協(xié)議的長連接和短連接。

       1.3,TCP長連接:client向server發(fā)起連接,server接受client連接,雙方建立連接,client與server完成一次請求后,它們之間的連接并不會主動關閉,后續(xù)的讀寫操作會繼續(xù)使用這個連接。

   2,請求方式:

   一共有8種請求方式,常用的請求方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE

   3,返回碼:

   每次請求,都會有狀態(tài)碼返回,常見的狀態(tài)碼有:

   200,請求成功

   206,請求內容局部成功

   403,拒絕或者禁止訪問

   404,客戶端請求語法錯誤,一般是連接地址不對.

   500,服務器出現(xiàn)異常.宕機.

        4.,Http是客服端發(fā)起請求,服務端才響應,發(fā)一次,響應一下,ajax的輪詢,也是讓瀏覽器隔個幾秒就發(fā)送一次請求,詢問服務器是否有新信息。這樣就很被動,服務端不能主動聯(lián)系客戶端,只能由客戶端發(fā)起。得不停的發(fā)起.

二,websocket     

       1,WebSocket就很好的解決被動性問題,只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸。不用再次發(fā)起網絡請求,服務端有消息就會自己發(fā)過來.它允許服務端主動向客戶端推送數(shù)據(jù)。比如在app上websocket獲取并展示客戶的時時消費情況.

        2,WebSocket同HTTP一樣也是應用層的協(xié)議. 都是基于TCP的,可靠性的傳輸協(xié)議。但是它是一種雙向通信協(xié)議,是建立在TCP之上的,并且Websocket是一個持久化的協(xié)議,而HTTP是非持久化的協(xié)議。WebSocket protocol 是HTML5一種新的協(xié)議,但Websocket是基于HTTP協(xié)議的,或者說借用了HTTP的協(xié)議來完成一部分握手。一開始的握手需要借助HTTP請求完成。 

        3,WebSocket在建立握手時,通過 HTTP/1.1 協(xié)議的101狀態(tài)碼進行握手。但是建立之后,在真正傳輸時候是不需要HTTP協(xié)議的,而是使用TCP協(xié)議.

        4,Websocket使用ws或wss的統(tǒng)一資源標志符,類似于HTTPS,其中wss表示在TLS之上的Websocket

       5,Websocket使用和 HTTP 相同的 TCP 端口,可以繞過大多數(shù)防火墻的限制。默認情況下,Websocket協(xié)議使用80端口;運行在TLS之上時,默認使用443端口。

       6,優(yōu)點:

    實時性更強,很好的控制開銷(協(xié)議的頭部較小),保持連接.

三,socket 

        1,概念:Socket其實并不是一個協(xié)議,而是為了方便使用TCP或UDP而抽象出來的一層,是位于應用層和傳輸控制層之間的一組接口.

         1.1,在程序內部提供了與外界通信的端口,也就是端口通信.它通過建立socket連接,可以為通信雙方的數(shù)據(jù)傳輸提供一個通道

         1.2,它是應用層與TCP/IP協(xié)議族通信的中間軟件抽象層,是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。

       2,當兩臺主機通信時,必須通過Socket連接,Socket則利用TCP/IP協(xié)議建立TCP連接。TCP連接則更依靠于底層的IP協(xié)議,IP協(xié)議的連接則依賴于鏈路層等更低層次。

        3,和機頂盒通信可以采用socket(自己決定采用udp的scoket還是tcp的socket,一般采用的是tcp的socket)

        4, Socket的分類
        4.1, 根據(jù)不同的的底層協(xié)議,Socket的實現(xiàn)是多樣化的.這里只介紹TCP/IP協(xié)議族的內容.

        4.2,在這個協(xié)議族當中主要的Socket類型為流套接字(streamsocket)和數(shù)據(jù)報套接字(datagramsocket)。

        4.3,流套接字將TCP作為其端對端協(xié)議,提供了一個可信賴的字節(jié)流服務。

        4.4,數(shù)據(jù)報套接字使用UDP協(xié)議,提供數(shù)據(jù)打包發(fā)送服務。 下面,

       5,tcp的scoket和udp的socket的區(qū)別

       使用UDP方式android端和服務器端接收可以看出,其實android端和服務器端的發(fā)送和接收大庭相徑,只要端口號正確了,相互通信就沒有問題,

        TCP使用的是流的方式發(fā)送,UDP是以包的形式發(fā)送。

         

         

感謝:

   基于android的Socket通信         

四,總計:

1,傳輸層的TCP是基于網絡層的IP協(xié)議的,
2,而應用層的HTTP協(xié)議又是基于傳輸層的TCP協(xié)議的,
3,而Socket本身不算是協(xié)議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的接口.

(二)websocket 和socket區(qū)別   

    1,websocket是應用層的協(xié)議,而socket是傳輸控制層的協(xié)議.  

(三)websocket 和http區(qū)別        

 相同點:

   1,都是應用層的協(xié)議

   2,都是基于tcp,并且都是可靠的協(xié)議

不同點:

    1,websocket是持久連接的協(xié)議,而http是非持久連接的協(xié)議.

    2,websocket是雙向通信協(xié)議,模擬socket協(xié)議,可以雙向發(fā)送消息,而http是單向的.

    3,websocket的服務端可以主動向客服端發(fā)送信息,而http的服務端只有在客戶端發(fā)起請求時才能發(fā)送數(shù)據(jù),無法主動向客戶端發(fā)送信息.

(四)HTTPS和HTTP的區(qū)別主要為以下四點:

1、https協(xié)議需要到ca申請證書,一般免費證書很少,需要交費。

2、http是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議。

3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。

4、http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進行加密傳輸、身份認證的網絡協(xié)議,比http協(xié)議安全。

五,長連接和短連接

       1,短連接:在HTTP1.0中,客戶端發(fā)送請求,服務器接收請求,雙方建立連接,服務器響應資源,請求結束。

       2,長連接:在HTTP 1.1,客戶端發(fā)出請求,服務端接收請求,雙方建立連接,在服務端沒有返回之前保持連接,當客戶端再發(fā)送請求時,它會使用同一個連接。這一直繼續(xù)到客戶端或服務器端認為會話已經結束,其中一方中斷連接。

       優(yōu)勢:減少了連接請求,降低TCP阻塞,減少了延遲,實時性較好。

       劣勢:可能會影響性能,因為它在文件被請求之后還保持了不必要的連接很長時間。

借鑒:

WebSocket介紹,與Socket的區(qū)別

https://blog.csdn.net/wwd0501/article/details/54582912

看完讓你徹底搞懂Websocket原理

https://blog.csdn.net/frank_good/article/details/50856585

WebSocket介紹,與Socket的區(qū)別

https://blog.csdn.net/wwd0501/article/details/54582912

長連接、短連接、長輪詢和WebSocket

https://blog.csdn.net/sweetsuzyhyf/article/details/60572795

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多