作記録

記憶代わり

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

WebSockets Standard

経緯

ブラウザとサーバー間で双方向な通信を行いたい場合、XMLHttpRequest を使う方法があった。
しかし、XMLHttpRequestは1つのリクエストに対して1つのレスポンスを得る非同期な通信方法なので、XMLHttpRequestを使って双方向通信を行うと複雑になってしまう。

そこで、簡単に双方向の通信を行うために WebSocket というプロトコルが生まれた。

WebSocket connection を確立する(WebSocket interface を実装したオブジェクトを生成する)と下記のことが可能になる。

  • WebSocket::send() を呼ぶことでブラウザからサーバーへデータを送ることが出来る。
  • onmessage EventHandler によりサーバーからブラウザにデータを送ることが出来る。

STOMP Over WebSocket