WebSocketとは
結論
WebSocket という名前は、大きく分けて2つの意味で利用される。
プロトコルとしてのWebSocket
RFC 6455: The WebSocket Protocol
インターフェースとしてのWebSocket
enum BinaryType { "blob", "arraybuffer" }; [Exposed=(Window,Worker)] interface WebSocket : EventTarget { constructor(USVString url, optional (DOMString or sequence<DOMString>) protocols = []); readonly attribute USVString url; // ready state const unsigned short CONNECTING = 0; const unsigned short OPEN = 1; const unsigned short CLOSING = 2; const unsigned short CLOSED = 3; readonly attribute unsigned short readyState; readonly attribute unsigned long long bufferedAmount; // networking attribute EventHandler onopen; attribute EventHandler onerror; attribute EventHandler onclose; readonly attribute DOMString extensions; readonly attribute DOMString protocol; undefined close(optional [Clamp] unsigned short code, optional USVString reason); // messaging attribute EventHandler onmessage; attribute BinaryType binaryType; undefined send((BufferSource or Blob or USVString) data); };
経緯
ブラウザとサーバー間で双方向な通信を行いたい場合、XMLHttpRequest を使う方法があった。
しかし、XMLHttpRequestは1つのリクエストに対して1つのレスポンスを得る非同期な通信方法なので、XMLHttpRequestを使って双方向通信を行うと複雑になってしまう。
そこで、簡単に双方向の通信を行うために WebSocket というプロトコルが生まれた。
WebSocket connection を確立する(WebSocket interface を実装したオブジェクトを生成する)と下記のことが可能になる。
- WebSocket::send() を呼ぶことでブラウザからサーバーへデータを送ることが出来る。
- onmessage EventHandler によりサーバーからブラウザにデータを送ることが出来る。