久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Websocket 協議解析

WebSocket protocol 是HTML5一種新的協議。它是實現了瀏覽器與服務器全雙工通信(full-duplex)。,HTML5中國,中國最大的HTML5中文門戶。
       WebSocket protocol 是HTML5一種新的協議。它是實現了瀏覽器與服務器全雙工通信(full-duplex)。

       現很多網站為了實現即時通訊,所用的技術都是輪詢(polling)。輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對服務器發出HTTP request,然后由服務器返回最新的數據給客服端的瀏覽器。這種傳統的HTTP request 的模式帶來很明顯的缺點 – 瀏覽器需要不斷的向服務器發出請求,然而HTTP request 的header是非常長的,里面包含的數據可能只是一個很小的值,這樣會占用很多的帶寬。

       而最比較新的技術去做輪詢的效果是Comet – 用了AJAX。但這種技術雖然可達到全雙工通信,但依然需要發出請求。


       在 WebSocket API,瀏覽器和服務器只需要要做一個握手的動作,然后,瀏覽器和服務器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送,改變了原有的B/S模式。

       在這里是關于Websocket在 php 中的實現,這篇文章里,我主要對websocket 協議進行一個簡單的介紹。


Websocket 業務模型



瀏覽器端的websocket 請求一般是


 // javacsript

  var ws = new WebSocket("ws://127.0.0.1:4000");

  ws.onopen = function(){

    console.log("succeed");

  };

  ws.onerror = function(){

    console.log(“error”);

  };

  ws.onmessage = function(e){

  console.log(e); 

  }


當 new 一個 websocket 對象之后,就會向服務器發送一個 get 請求



       這個請求是對摸個服務器的端口發送的,一般的話,會預先在服務器將一個socket 綁定到一個端口上,客戶端和服務器端在這個預定的端口上通信(我這里綁定的就是 4000 端口,默認情況下,websocke 使用 80 端口)。


       然后,在服務器端的socket監聽到這個packet 之后就生成一個新的 socket,將發送過來的數據中的 Sec-WebSocket-Key 解析出來,然后按照把“Sec-WebSocket-Ke”加上一個魔幻字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”。使用SHA-1加密,之后進行BASE-64編碼,將結果做為“Sec-WebSocket-Accept”頭的值,返回給客戶端。


       客戶端收到這個之后,就會將 通信協議 upgrade 到 websocket 協議。



       然后就會在這個持久的通道下進行通信,包括瀏覽器的詢問,服務器的push,雙方是在一個全雙工的狀態下相互通信。 切換后的websocket 協議中的 數據傳輸幀的格式(此時不再使用html協議) 官方文檔給出的說明:



       直接看這個,誰都會有點頭大: 我花了一幅圖來簡單的解釋這個 frame 的結構。



各字段的解釋:


FIN              1bit 表示信息的最后一幀,flag,也就是標記符


RSV 1-3        1bit each 以后備用的 默認都為 0


Opcode         4bit 幀類型,


Mask              1bit 掩碼,是否加密數據,默認必須置為1 


Payload len   7bit 數據的長度,當這個7 bit的數據 == 126 時,后面的2 個字節也是表示數     據長度,當它 == 127 時,后面的 8 個字節表示數據長度Masking-key      1 or 4 bit 掩碼Payload data  playload len  bytes 數據


       所以我們這里的代碼,通過判斷 Playload len的值,來用 substr 截取 Masking-key 和 PlayloadData。


       根據掩碼解析數據的方法是:


for( i = 0; i < data.length ; i++){

   orginalData += data[i]  ^  maskingKey[i mod 4]; 

}


       在PHP中,當我們收到數據之后,按照這里的格式截取數據,并將其按照這里的方法解析后就得到了瀏覽器發送過來的數據。 當我們想把數據發送給瀏覽器時,也要按照這個格式組裝frame。 這里是我的方法:


  function frame($s){

  $a = str_split($s, 125);

  if (count($a) == 1){

  return "\x81" . chr(strlen($a[0])) . $a[0];

  }

  $ns = "";

  foreach ($a as $o){

  $ns .= "\x81" . chr(strlen($o)) . $o;

  }

  return $ns;

 }


       強行將要發送的數據分割成 125 Byte / frame,這樣 playload len 只需要 7 bits。也就是直接將數據的長度的ascall碼拼接上去,然后后面跟上要發送的數據。 每一個 frame 前面加的 ‘\x81’ 用二進制就是: 1000 0001 1000 :


1 是 FIN


000 是三個備用的bit


0001 : 指的是 opcode 官方的解釋:



       可以設置 opcode的值,來告訴瀏覽器這個frame的數據屬性。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

由于實際運行環境是在瀏覽器中,因此性能還取決于JavaScript解釋器的效率,指定的FPS幀速在低性能解釋器中可能不會達到,所以這部分不是開發者能夠決定的,開發者能作的是盡可能通
本文將使用HTML5提供的VideoAPI做一個自定義的視頻播放器,需要用到HTML5提供的video標簽、以及HTML5提供的對JavascriptAPI的擴展。,HTML5中國,中國最大的HTML5中文門戶。
隨著 Hybrid 應用的豐富,HTML5 工程師們已經不滿足于把桌面端體驗簡單移植到移動端,他們覬覦移動原生應用人性化的操作體驗,特別是原生應用與生俱來的豐富的手勢系統。HTML5 沒有提
你想要在自己網站上分享一個產品,或者是一個作品集,又或者僅僅只是一個靈感。在你發布到網上之前,你想讓它看起來有吸引力,專業,或者至少得看起來像那么回事。那么你接下
本篇文章主要介紹了HTML5-WebSocket實現多文件同時上傳的實例,HTML5結合Websocket進行文件的傳輸就變得更加方便和靈活,有興趣的可以了解一下。
H5廣告,包括H5廣告的設計流程,究竟有什么講究,和階段。為了能幫助更多的人了解H5廣告,我專門做了一個講義。同時,也讓我意外的收到了非常好反饋和認!這是對我的極大鼓勵!我的
主站蜘蛛池模板: 成人欧美一区二区三区黑人孕妇 | 日韩中文在线观看 | 成人在线电影在线观看 | 久久在看| 亚洲综合免费 | 91在线视频播放 | 日本高清在线一区 | 午夜免费电影 | 国产一区二区在线免费视频 | 国产中文字幕在线观看 | 国产精品久久久免费 | 久久久久久久久国产精品 | 91色在线| 国产1区2区3区 | 99成人免费视频 | 伊人网91 | 永久av | 九九免费视频 | 成人黄色av网站 | 国产欧美精品区一区二区三区 | 日韩不卡一区二区三区 | 偷拍自拍第一页 | 亚洲午夜精品在线观看 | 日韩精品1区2区3区 爱爱综合网 | 国产在线中文字幕 | 一级黄色日本片 | 天天干.com | 久久综合一区 | 国产精品久久久久久久久久妇女 | 国产黄色精品在线观看 | 日本a在线| 日韩精品国产精品 | 青青草一区二区三区 | a级免费观看视频 | 福利一区在线观看 | 国产精品a久久久久 | 日韩视频 中文字幕 | 久久这里只有精品首页 | 国产亚洲精品精品国产亚洲综合 | 91美女在线观看 | 中文字幕成人网 |