TOUCH THE SECURITY Powered by Security Service G

コラム

2023.10.06

WebSocket通信について

Webアプリケーション診断を業務として行っているとWebSocket通信を行っているアプリケーションに稀に遭遇します。WebSocket通信が通常のhttp通信とどう違うかについてこの記事で話していきます。

そもそもWebSocket通信とは

WebSocket通信はhttp通信と同じくTCP/UDP上で動く通信です。
http通信はクライアントがサーバをリクエストに送り、応答を受けるという流れになりますが、WebSocket通信はクライアントとサーバ間でコネクションを確立した後に双方どちらかでイベントが発火され、もう片方が発火されたイベントに応じてアクションを行うイベント駆動のような動きを行います。
http通信(HTTP/1.0)は通信毎にtcpコネクションを確立しますが、WebSocket通信は通信前にコネクションを確立し、それを使いまわします。

http通信とWebSocket通信の違い

http通信とWebSocket通信の違いとしては「単方向性か、双方向性か」が挙げられます。この違いで用途によってhttp通信を用いるかWebSocket通信を用いるかが変わってきます。

単方向性か、双方向性か

http通信はクライアントからサーバへリクエストを送り、サーバから応答を受け取るという単方向通信です。
WebSocket通信はコネクションを確立後にクライアントからリクエストを送ることもでき、逆にサーバからのイベントを受けて動作することもできる、双方向通信です。この違いからWebSocket通信は、双方向のチャットやゲーム、非同期でサーバからデータを受け取るようなコンテンツに向きます。 

WebSocket通信が利用できない場合はポーリングを

上記に記載のWebSocket通信のようなリアルタイムにサーバのメッセージをうけクライアントで何かの動作を行うということはhttp通信でもポーリングを実装すれば可能です。

実装内容としては一定間隔でクライアントからサーバに通信を行います。サーバは何かイベントがあればそれをレスポンスとして返却し、クライアントはレスポンスの内容に応じてアクションを行うという流れです。
WebSocket通信が利用できないプロダクトではこのようにポーリングを自前で実装し、http通信でWebSocket通信のような動作を行わせるケースがあります。

まとめ

いかがでしたでしょうか。
WebSocket通信はhttp通信に比べて利用される機会が少ないです。 しかし、利用されているプロダクトは必ず存在するので知っておいたほうが良いと思い調べました。

記事一覧に戻る