WebSocket を試す

Web といえば HTTP なわけですが、HTTP はあくまでプル型の機能です。つまり、自分から取りに行ってはじめて何らかの情報を得ることができます。

近年はいろんな API(Webサービス) が登場していて、それを利用することもあるかと思いますが、よくある REST API なども自分からコールしてその結果を得るものです。

RSSフィードにしても、Eメール(POP3)にしても、自分から取りに行く必要があります。
とはいえRSSフィードはそんなに頻繁に取得する必要はないですし、POP3 などは、短くても分単位でポーリングしておけば十分でしょう。

ただ、もっと速く、もっと短い間隔で、リアルタイムに情報を取得したいケースもあります。 しかしそんなときに1秒おきにリクエストを送信するなどして対応したら、攻撃とみなされてしまうかもしれません。

こういうケースでは、クライアントがデータを取りに行くのではなく、サーバ側起点で情報を送ってくれた方が効率的です。
プル型ではなくプッシュ型の方式ということです。

こういった要件を満たすために、ロングポーリングなどの方法が考え出されました。
WebSocket も、プッシュ型の通信を実現するものです。

最近のブラウザではだいたい WebSocket が使用できますので、この機能を試してみたいと思います。

データの取得先は、リアルタイムといえば取引ということで、仮想通貨取引所 Bitmex の WebSocketAPI を使ってみます。

<!DOCTYPE html>
<meta charset="utf-8" />
<script>
const ws = new WebSocket('wss://www.bitmex.com/realtime?subscribe=quote:XBTUSD');

ws.onopen = event => {
   console.log(event);
};
ws.onmessage = event => {
   console.log(event);
};
ws.onclose = event => {
   console.log(event);
};
</script>
<button onclick='ws.close();'>Close</button>

WebSocket のインタフェースはシンプルです。これだけで、コンソールログに情報がずらずらと流れます。