天天看點

WebSocket(叁) 生成資料幀

昨天的文章中介紹了WebSocket資料幀的結構和解析。其實對從伺服器發送往用戶端的資料也是同樣的資料幀。但是以覺得這看似和解析資料幀一樣簡單那就錯了。我們需要自己去生成資料幀。而且會遇上和解析時候不同的問題,比如資料幀分片傳輸的情況。

  從伺服器發送到用戶端的數組幀不需要掩碼,這是非常值得慶幸的地方。于是要寫出一個生成資料幀的函數并不難

可以把它用于一個執行個體中

WebSocket(叁) 生成資料幀

上面是最基本的用法。但是有時候資料需要分成多個資料包來發送,這就需要用到分片,也就是使用多個資料幀來傳輸一個資料。分片傳輸分為三個部分:

    開始幀:FIN=0,Opcode>0;一個

    傳輸幀:FIN=0,Opcode=0;零個或多個

    終止幀:FIN=1,Opcode=0;一個

  FIN是FINAL的縮寫,它為1時表示一個資料傳輸結束,而開始和傳輸幀的時候資料都沒結束,是以是0,之後最後的結束幀FIN是1。同一個資料即使分片傳輸,它的每個資料幀的Opcode也應該相同,為了避免沖突,隻對分片傳輸的開始幀設定Opcode,傳輸幀和結束幀的Opcode留0。是以把上面執行個體的部分代碼改成

就可以在用戶端得到

WebSocket(叁) 生成資料幀

這就是分片傳輸的關鍵所在。

繼續閱讀