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

Websocket 協(xié)議解析

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

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

       而最比較新的技術(shù)去做輪詢的效果是Comet – 用了AJAX。但這種技術(shù)雖然可達(dá)到全雙工通信,但依然需要發(fā)出請(qǐng)求。


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

       在這里是關(guān)于Websocket在 php 中的實(shí)現(xiàn),這篇文章里,我主要對(duì)websocket 協(xié)議進(jìn)行一個(gè)簡單的介紹。


Websocket 業(yè)務(wù)模型



瀏覽器端的websocket 請(qǐng)求一般是


 // 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); 

  }


當(dāng) new 一個(gè) websocket 對(duì)象之后,就會(huì)向服務(wù)器發(fā)送一個(gè) get 請(qǐng)求



       這個(gè)請(qǐng)求是對(duì)摸個(gè)服務(wù)器的端口發(fā)送的,一般的話,會(huì)預(yù)先在服務(wù)器將一個(gè)socket 綁定到一個(gè)端口上,客戶端和服務(wù)器端在這個(gè)預(yù)定的端口上通信(我這里綁定的就是 4000 端口,默認(rèn)情況下,websocke 使用 80 端口)。


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


       客戶端收到這個(gè)之后,就會(huì)將 通信協(xié)議 upgrade 到 websocket 協(xié)議。



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



       直接看這個(gè),誰都會(huì)有點(diǎn)頭大: 我花了一幅圖來簡單的解釋這個(gè) frame 的結(jié)構(gòu)。



各字段的解釋:


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


RSV 1-3        1bit each 以后備用的 默認(rèn)都為 0


Opcode         4bit 幀類型,


Mask              1bit 掩碼,是否加密數(shù)據(jù),默認(rèn)必須置為1 


Payload len   7bit 數(shù)據(jù)的長度,當(dāng)這個(gè)7 bit的數(shù)據(jù) == 126 時(shí),后面的2 個(gè)字節(jié)也是表示數(shù)     據(jù)長度,當(dāng)它 == 127 時(shí),后面的 8 個(gè)字節(jié)表示數(shù)據(jù)長度Masking-key      1 or 4 bit 掩碼Payload data  playload len  bytes 數(shù)據(jù)


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


       根據(jù)掩碼解析數(shù)據(jù)的方法是:


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

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

}


       在PHP中,當(dāng)我們收到數(shù)據(jù)之后,按照這里的格式截取數(shù)據(jù),并將其按照這里的方法解析后就得到了瀏覽器發(fā)送過來的數(shù)據(jù)。 當(dāng)我們想把數(shù)據(jù)發(fā)送給瀏覽器時(shí),也要按照這個(gè)格式組裝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;

 }


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


1 是 FIN


000 是三個(gè)備用的bit


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



       可以設(shè)置 opcode的值,來告訴瀏覽器這個(gè)frame的數(shù)據(jù)屬性。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

由于實(shí)際運(yùn)行環(huán)境是在瀏覽器中,因此性能還取決于JavaScript解釋器的效率,指定的FPS幀速在低性能解釋器中可能不會(huì)達(dá)到,所以這部分不是開發(fā)者能夠決定的,開發(fā)者能作的是盡可能通
本文將使用HTML5提供的VideoAPI做一個(gè)自定義的視頻播放器,需要用到HTML5提供的video標(biāo)簽、以及HTML5提供的對(duì)JavascriptAPI的擴(kuò)展。,HTML5中國,中國最大的HTML5中文門戶。
隨著 Hybrid 應(yīng)用的豐富,HTML5 工程師們已經(jīng)不滿足于把桌面端體驗(yàn)簡單移植到移動(dòng)端,他們覬覦移動(dòng)原生應(yīng)用人性化的操作體驗(yàn),特別是原生應(yīng)用與生俱來的豐富的手勢(shì)系統(tǒng)。HTML5 沒有提
你想要在自己網(wǎng)站上分享一個(gè)產(chǎn)品,或者是一個(gè)作品集,又或者僅僅只是一個(gè)靈感。在你發(fā)布到網(wǎng)上之前,你想讓它看起來有吸引力,專業(yè),或者至少得看起來像那么回事。那么你接下
本篇文章主要介紹了HTML5-WebSocket實(shí)現(xiàn)多文件同時(shí)上傳的實(shí)例,HTML5結(jié)合Websocket進(jìn)行文件的傳輸就變得更加方便和靈活,有興趣的可以了解一下。
H5廣告,包括H5廣告的設(shè)計(jì)流程,究竟有什么講究,和階段。為了能幫助更多的人了解H5廣告,我專門做了一個(gè)講義。同時(shí),也讓我意外的收到了非常好反饋和認(rèn)!這是對(duì)我的極大鼓勵(lì)!我的
主站蜘蛛池模板: 成人中文字幕在线观看 | a天堂在线观看 | 免费三级网站 | 久久噜噜| 二区三区在线观看 | 欧美激情区 | 中文字幕免费视频 | av毛片在线看 | 一区二区三区四区视频在线观看 | 91久久久久久久 | 五月综合色 | 亚色网站 | 中文字幕亚洲一区 | 国产ts在线| 午夜视频 | 黄色av一区 | 黄色片免费观看 | 天堂网亚洲 | 91av视频| 日本在线视频观看 | 日韩欧美二区 | 国产福利在线播放 | 亚洲成人欧美 | 精品黄色片 | 国产伦精品一区二区三区免费视频 | 欧美日韩亚洲天堂 | 国产免费91 | 亚洲成人免费观看 | 国产精品成人国产乱一区 | 久久久国 | 性大毛片视频 | 好吊视频一区二区三区四区 | 日韩精品久久久久久免费 | 亚洲视频在线观看免费 | 国产二区视频在线观看 | 日本欧美久久久久免费播放网 | 青青草久久 | 日皮视频免费看 | 久久精品日韩 | 日本加勒比在线观看 | 日韩免费在线视频 |