COLUMN
2023年03月06日
サーバーからクライアントに対してメッセージを送信する技術まとめ
カテゴリー:サービス, テクノロジー
タグ:DX, システム開発, 業務システム
Webアプリケーションは基本的にプル型です。つまりクライアントがアクセスすることでサーバー側でイベントが発生し、それに対してレスポンスを返すという形になります。
しかし、場合によってはクライアントに対してメッセージを送信したいと考えることがあるでしょう。そのために使える技術をまとめて紹介します。
WebSocket
サーバーとクライアント間でメッセージを送受信する際の最初の選択肢になります。ソケットを開いたままにしてメッセージを送り合うので、メッセージはリアルタイムで送受信されます。
送信できるメッセージはテキストのみなので、チャットやサーバーの処理完了通知などに用いられることが多いです。
SSE
Server-Sent Eventsの略になります。WebSocketのように使えますが、特徴はサーバーからクライアントに対する一方通行であるという点になります。WebSocketのようにクライアントからサーバーに対するメッセージには利用できません。
そのため、サーバーでの非同期処理を通知するのに使うことが多いようです。チャットのような機能も実現できますが、あえてSSEで実装するメリットは薄そうです。
WebRTC
WebRTCはWebSocketとは異なり、動画や音声などを扱えます。また、中央サーバーがある形だけでなく、P2Pでの相互送信も可能です(初期のコネクション時にサーバーが必要です)。
WebRTCではDataChannelが用意されており、テキスト(それ以外のデータも)を扱えます。このDataChannelはTCPではなく、UDPを利用しています。
Long Polling
Long PollingはWebSocketのような標準技術がない中でリアルタイム通信を実現するために使われていた技術になります。クライアントとサーバーの接続状態を長時間維持し、その間にデータを送信します。接続が切れたら、また即座にリクエストを実行します。
WebSocketに対応していないクライアントでも利用できるメリットはありますが、サーバー側の接続数を数多く消費してしまうデメリットもあります。
WebPush API
Webプッシュ通知は開いた際のイベントをWebブラウザで受け取ることができます。それを使ってクライアントからデータを取得するような処理も書けるでしょう。
実装時にはクライアントに送信許可が必要だったり、ブラウザから得られるキーを保存する必要があるなど、若干の手間があります。
そのWebサイトを開いている必要はありませんが、ブラウザは立ち上がっている必要があります。
Webhook
Webhookもこうした機能を実装するときによく注目される技術になります。Webhookはクライアントではなく、サーバーに対してリクエストを実行します。つまりサーバー間通信に利用する技術になります。
サーバー側で何かデータの変更があったのを知る際には、頻繁にリクエストを行う、WebSocketのようなコネクションを維持する技術を使うと言ったのが一般的です。しかしWebhookであれば、データの更新があったサーバーから、更新時にのみ通知を受け取れるようになります。
まとめ
サーバーからメッセージを送信することで、リアルタイムに状況を通知したり、状態を画面に反映できるようになります。業務アプリケーションのコラボレーション機能(共同編集機能)を実現したり、メッセージのやり取りに利用できるでしょう。
HexabaseではWebSocket、SSEによるメッセージ送信に対応しています。ぜひ活用してください。