1. 程式人生 > >http與Socket區別

http與Socket區別

HTTP:

         超文字傳輸協議。

        1.

             典型的響應訊息:
             HTTP/1.0200 OK
             Date:Mon,31Dec200104:25:57GMT
             Server:Apache/1.3.14(Unix)
             Content-type:text/html
             Last-modified:Tue,17Apr200106:46:28GMT
             Etag:"a030f020ac7c01:1e9f"
            Content-length:39725426
            Content-range:bytes55******/40279980

        2.

      Request 請求
     請求的四種動作:
        GET:從特定的源獲取資訊
        POST:傳送新的資訊去特定的源
        PUT:更新特定源的現有資訊
        DELETE:刪除特定源上的現有資訊
     HTTP請求的組成:
        request line:告訴伺服器是哪一種請求正在發生和尋找的資源是什麼
        header:傳送給伺服器的附加資訊,例如是哪個客戶端發出的請求
        body:在GET請求中可以是空的,在POST和PUT的請求中包含了資料
    Response 響應
     一次對伺服器成功請求的結果被包含在一個響應中,這個響應是伺服器返回給客戶端的一個訊息。這個來自伺服器的響應包含了一個3位數字的狀態程式碼(HTTP Status Codes)。這些程式碼是由1、2、3、4、5開頭的。( http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81)
   五種狀態程式碼:
        1xx:伺服器正在執行你的請求
        2xx:伺服器響應成功
        3xx:這類狀態碼代表需要客戶端採取進一步的操作才能完成請求,通常需要重定向
        4xx:客戶端錯誤
        5xx:服務端錯誤
     HTTP響應的組成:
        response line:包含了HTTP狀態程式碼
        header:包含了關於伺服器和這個響應的資訊
        body:響應的內容
    資料格式
        XML(Extensible Markup Language)可擴充套件標記語言
   它和HTML很類似,都使用的是尖括號的標籤,不同的是XML允許你使用你自己組裝的標籤
<pet>
  <name>Jeffrey</name>
  <species>Giraffe</species>
</pet>
        JSON(Java Script Object Notation)JS物件符號
     通常JSON和XML是二選一的,JSON的資料格式很類似於JavaScript的物件
{
  "pets": {
    "name": "Jeffrey",
    "species": "Giraffe"
  }
}

Socket:

                1.

               建立網路通訊連線至少要一對埠號(socket)。socket本質是程式設計介面(API),對TCP/IP的封裝,TCP/IP也要提供可供程式設計師做網路開發所用的介面,這就是Socket程式設計介面;HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力。

               2.

                  一個是ServerSocket,一個是Socket。服務端和客戶端之間通過Socket建立連線,之後它們就可以進行通訊了。首先ServerSocket將在服務端監聽某個埠,當發現客戶端有Socket來試圖連線它時,它會accept該Socket的連線請求,同時在服務端建立一個對應的Socket與之進行通訊。這樣就有兩個Socket了,客戶端和服務端各一個。

               3.

               (1)伺服器監聽:是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。
               (2)客戶端請求:是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連線請求。
                (3)連線確認:是指當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求,它就響應客戶端套接字的請求,建立一個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連線就建立好了。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。

總結:

      HTTP與Socket的區別:一個傳輸的快,一個傳輸的慢。但是他們都是基於TCP/IP/UDP的三種協議,進行資料傳輸的。

     Socket 傳輸的特點:
      傳輸資料為位元組級,傳輸資料可自定義,資料量小(對於手機應用講:費用低),傳輸資料時間短,效能高,適合於客戶端和伺服器端之間資訊實時互動,可以加密,資料安全性強。
      缺點:

     需對傳輸的資料進行解析,轉化成應用級的資料,對開發人員的開發水平要求高,相對於Http協議傳輸,增加了開發量。

     一般用於:新聞推送等。

HTTP協議的傳輸特點:
    基於應用級的介面使用方便,程式設計師開發水平要求不高,容錯性強
    缺點:

   傳輸速度慢,資料包大(Http協議中包含輔助應用資訊),如實時互動,伺服器效能壓力大。資料傳輸安全性差。

   一般用於:點播,hls,http  直播:rtmp,hls,hds等協議。

為什麼國內視訊網站多采用HTTP協議傳輸視訊,而國外多使用RTMP等專門的流媒體協議

1.直播受眾較多就只能用cdn,http在cdn中支援較好。

2.http對客戶端開發支援較好。

3.伺服器端成本低,http用nginx就行,省了wowza的許可錢。

4.主播直播使用者比較離散,定製功能較多,所以用http較少。

5.直播:RTMP(延遲低,適合對實時性要求比較高的情況,比如互動直播,延遲控制在3秒內,移動端播放器SDK需要自己搞)。

6.FLV OVER HTTP(延遲比RTMP高一點,來瘋之類在用) 。

7.HLS(高延遲,至少9秒左右,適合遊戲直播,Twich好像用這個)。

8.點播:HTTP-RANGE,

9.HLS(比較適合直播,移動端系統都支援,播放器PC端可以用開源的基於Flash外掛的播放器,純JS 的播放器就THEOPlayer比較靠譜)。

10.MPEG-DASH(youtube在用?現在還沒有流行)。