使用websocket發送圖片檔案

來源:互聯網
上載者:User

標籤:cdata   xtend   限制   功能   ntc   stream   idt   base   padding   

Websocket是HTML5中的一個傳輸資料控制項。

眼下在主流的瀏覽器中都提供了支援。

關於websocket的相關協議能夠在網上查到,關於怎樣建立串連等操作大家能夠查詢協議獲得。本文主要討論怎樣進行傳輸資料。

 

在client使用的是Chrome瀏覽器,在server端使用PHP開發websocket協議。

 

Websocket協議一個frame的標準格式:

         0                   1                   2                   3

     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

    +-+-+-+-+-------+-+-------------+-------------------------------+

    |F|R|R|R| opcode|M| Payload len |   Extended payload length    |

    |I|S|S|S|  (4)  |A|    (7)     |             (16/64)           |

    |N|V|V|V|       |S|             |  (if payload len==126/127)   |

    | |1|2|3|       |K|             |                               |

    +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +

    |     Extended payload lengthcontinued, if payload len == 127  |

    + - - - - - - - - - - - - - - - +-------------------------------+

    |                              |Masking-key, if MASK set to 1  |

    +-------------------------------+-------------------------------+

    | Masking-key (continued)      |          Payload Data         |

    +-------------------------------- - - - - - - - - - - - - - - - +

    :                     Payload Datacontinued ...                :

    + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

    |                     Payload Datacontinued ...                |

    +---------------------------------------------------------------+

圖中的Payload Len表示發送資料長度。

當資料長度小於126時(0-125),長度使用7位表示。

當Payload len等於126時,須要使用擴充長度(Extendedpayload length),此時用16位表示長度(0-65535)。

當Payload len等於127時,擴充長度的位元是64位(資料最大長度為2的64次方)。

 

所以理論上來講,該協議能滿足一次傳輸大資料的要求(相信也非常少有一次性傳輸2的64次方資料的需求吧)。

 

實際使用中。會對發送資料的長度有一定限制。

比方出於安全考慮一次發送的MTU長度不大於1500個位元組。

而chrome中對websocket的控制項一次發送資料的長度限定在128Kbytes,也就是2的17次方的長度。

而且這個最大長度貌似是不能通過配置改動的。

Php開發的server端。對發送資料的長度也有定義。一般是4096位元組,這個大小是能夠通過設定檔調整的。但出於總體效能的考慮一般採用預設設定。

 

通過以上情況能夠看出,對於發送圖片資料來說(一張圖片往往會大於128KB)我們須要將圖片資料進行切分。

         應用程式層的協議須要對切分的圖片資料進行控制。同一時候對於發送的圖片資料進行一些轉碼的處理。

        

         使用者自己定義傳輸資料協議位於資料的頭部,占16個位元組。

         每一部分以字串的格式表示2個位元組的short類型。比方0x0016,則字串表示為’0016’

 

使用者自己定義協議頭:

資料編號

Short類型(4個位元組)

保留

Char類型(4個位元組)

資料總包數

Short類型(4個位元組)

當前資料包索引

Short類型(4個位元組)

 

資料編號:

         標記一個大資料。防止在傳輸過程中產生錯亂。一個大資料僅僅有一個編號。從1開始,功能同一時候產生65535個大資料。

 

資料總包數:

         表示一個大資料一共拆分成的資料包個數,最少1包,最多65535包。每一包資料的大小能夠自己定義,但不應超過128Kbytes大小。

 

當前資料包索引:

         表示當前傳輸的是第幾包資料。

索引號從1開始,到65534結束。

 

 

接收和發送大資料的時候都須要對拆分的資料包進行處理。

發送時進行拆分處理。

接收時進行合并處理。

 

client的websocket資料收發基於chrome核心,使用JavaScript語言進行支援。

server端的websocket資料收發使用PHP語言進行支援。

 

client發送時須要對資料進行加密,使用Mask-Key,加密工作由websocket控制項自己主動完畢。

server端接收資料時須要對客戶發發送的加密資料進行解密。

server端發送時臨時不正確資料進行加密,後期能夠考慮加上Mask-Key。

 

詳細的Mask-Key和加解密的規則能夠參考websocket協議。

 

 

 

 

 

選擇圖片發送

 

為選擇一張圖片發送到server端,再從server端返回到指定客戶對顯示。

圖片的解析度在320*240。映像大小在75Kbytes左右。

在發送時將資料拆分成2Kbytes大小的資料包,一共75K/2K*2=75包資料。

(編碼時將一個位元組拆成了兩個位元組編碼)

每包發送資料的間隔定在500毫秒。(資料包的發送間隔的定義主要還是依據server端的處理能力制定。處理能力強能夠更快的處理髮送的資料包。

或者能夠使用應答方式進行傳輸。即每收到一包資料就通知發送端發送下一包資料。

則我們能夠計算出一幅75K左右的圖片從A端傳送到B端須要的時間是(相比較500毫秒的傳送間隔,傳送的資料能夠忽略不計):

T=75*500ms=37.5s

也就是一幅320*240的圖片傳送時間在37.5s左右。

 

以上是以傳輸圖片為例。進一步能夠傳輸映像資料。還是以320*240映像為例。設每秒傳輸24幅映像,則傳輸一幀視頻的流量為75KBytes*24=1.8Mbytes/s。

 

顯然眼下的傳輸速度對於傳輸視頻是不夠的。還須要在server端進行最佳化。

 

 

下面是測試地址:

         資料發送:

         發送資料連線

         資料接收:

         接收資料連線

 

使用步驟:

1,開啟資料發送串連和資料接收串連

2,以username登入,注冊地址例如以下:

         http://www.yourtechnic.com/login.php

3。正常登入串連之後,選擇須要發送的圖片,點擊“SendPicData”button

4。等待傳輸資料完畢,接收端顯示圖片。

 

下一步嘗試將圖片傳輸的功能加入到YourAPP中,同一時候測試一下視頻傳輸的可能性。

 

優態客(YourTechnic)的部落格:    www.yourtechnic.com

優態客(YourTechnic)的連絡方式:[email protected]

使用websocket發送圖片檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.