WebSockets-完全非同期Web

数週間前、Google Chromium開発者がWebSocketテクノロジーのサポートに関するニュースを投稿しました。 ITブルジョワでは、ニュースは爆発する爆弾の効果を生み出しました。 同じ日に、非常に有名なさまざまなIT専門家が新製品をテストし、ブログに絶賛を残しました。 さまざまなサーバー/ライブラリ/フレームワーク( Apache、EventMachine、Twisted、MochiWebなどを含む)の開発者はすぐに、WebSocketのサポートが近い将来に製品に実装されることを発表しました。
私たちを約束するテクノロジーの何がそんなに面白いですか? 私の意見では、 WebSocketは、HTTPプロトコルの開始以来、最も劇的な拡張機能です。 これは簡単なことではなく、HTTPパラダイムの変化です。 最初は、「要求/応答」のモデルに基づいて構築された同期プロトコルは、 完全に非同期で対称になります。 固定ロールを持つクライアントとサーバーはなくなりましたが、データ交換には2つのピアがあります。 それぞれが独自に機能し、必要に応じて別のデータを送信します。 送信された-そして、待って何もしなかった。 2番目の側は、必要に応じて答えます-すぐにではないかもしれませんし、まったくないかもしれません。 このプロトコルは、データ交換の完全な自由を提供します。使用方法はユーザーが決定します。

あなたが開発している場合、ウェブソケットは法廷に来ると信じています:
-交換とチャネルの速度を要求する、集中的なデータ交換を伴うWebアプリケーション。
-標準に準拠したアプリケーション。
-「長期にわたる」Webアプリケーション。
-ページ上に多くの異なる非同期ブロックを持つ複雑なアプリケーション。
-クロスドメインアプリケーション。



そして、それはどのように機能しますか?



とても簡単です! ページがサーバー上のWebソケットを開くことを決定すると、特別なjavascriptオブジェクトを作成します。
  1. <script>
  2. ws = new WebSocket("ws://site.com/demo");
  3.  
  4. // -:
  5.  
  6. // , :
  7. ws.onopen = function() { alert("Connection opened...") };
  8.  
  9. // -
  10. ws.onclose = function() { alert("Connection closed...") };
  11.  
  12. // , , - , - -
  13. ws.onmessage = function(evt) { $("#msg").append("<p>"+evt.data+"</p>"); };
  14.  
  15. </script>
* This source code was highlighted with Source Code Highlighter.


?

HTTP-. TCP 80 GET-:
GET /demo HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: site.com
Origin: http://site.com


, :
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://site.com
WebSocket-Location: ws://site.com/demo



, TCP- . — «» , .
- , - :
0x00, < UTF-8>, 0xFF

— , 0x00, — 0xFF. — , ! , : XML, JSON, .
, , «» - onmessage.

, 95%. AJAX-, . . TCP- — — — .
:
, - UTF-8! , .



?

WebSockets . - :
0x80, < - >, < >

« »? , . : (0) (1), 7 . : - 0x80, «», — , «», , 0 . — «». «» . . 7- .

, - — GIF 43 :
0x80, 0x2B, < >

160 2 :
0x80, 0x81, 0x20, < >

, ?

?



, TCP- — , , -. ( - , 1 TCP- . :) ).
, — , , .


WebSockets Comet — Bayuex, LongPolling, MultiPart . , , , . : «» . «» - «» — .. ( ) 2, , . , , . , - — - -. , — , .

, 2 : AJAX WebSockets. - — , -. , , -, .. . , . : — . - onmessage . - , , . ? LongPolling ( ) .


HTTP - . , , .. «» . , . , , TCP-. , .

-

HTTP . - , , — Bayeux Protocol.
, -. , . — ( ) — — . , .

-

« » AJAX- — - . , . . WebSockets . «---», «-», , . , Origin. websocket-. , .
! - !

?

!

UPDATE: - www.mibbit.com ( ).
PHP- WebSocket phpDaemon, WebSocketServer. , «pong» () «ping» — ExampleWebSocket.
tcpdump , .


? . « » -, . , , (!) . WebKit — Safari. .

, ?

web-socket-js -. , - . .


, , . - . « AJAX», - WebSockets .

...


, . ...

: WebSockets —

Source: https://habr.com/ru/post/J79038/


All Articles