ソケット通信の概略についてはこちらの記事で説明しています。
今回はソケット通信についてもっと深掘っていきたいと思います。
ソケットとは
ソケットは簡単に例えるなら、家のドアとか郵便ポストになります。
人が宅配の荷物を送るときは、送り主がどこどこの住所のどこのマンションの何号室っていう具合に細かく住所を特定します。
「都内のどっかのマンションの適当な部屋の前に置いといて」と言われても送ることができませんね。
インターネット通信も同様に、送り手のクライアントがどこのサーバーの何番ポートのソケットにめがけて通信、という具合にして通信が行われます。
ここで「ポート」と「ソケット」という言葉が出ましたが、この違いについては
簡単に言うと、
「ポート」は部屋番号
「ソケット」はドア、郵便ポスト
という認識でよいかと思います。
もっと厳密な違いはありますが、どちらもインターネット通信を行う接続口を担うものなので、あまり気にしないでいいと思います。
なので、ソケットとはインターネット通信を行う際の出入り口という感じでお考え下さい。
ソケット通信
インターネット通信は4つの層に分かれます。
・アプリケーション層 :人間が認識できるようなデータを扱う
・トランスポート層 :アプリーケーションごとにデータを振り分ける
・インターネット層 :ネットワーク間のデータ転送を行う
・ネットワークインターフェース層:同一ネットワーク内でテータ転送を行う
このうちソケット通信はトランスポート層にあたり、TCPやUDPを使ってアプリケーションごとにデータ(パケット)の振り分けを行います。
引用:https://qiita.com/Kept1994/items/b28581f9cf2bd8383ef4
このように中にカーネルが在中していてパケットの振り分けを行ってくれています。
これが広義の意味でのソケット通信になります。
ではこれを踏まえてWebSocketの説明です。
Websocketとは
ソケット通信を行うためのプロトコルの一種です。
WebSocketとは、WebサーバーとWebブラウザの間で双方向通信できるようにする通信技術です。
通常、Webアプリケーションの通信はHTTP通信で、クライアントがリクエストし、サーバがレスポンスという形で返答を行います。
しかし、WebSocketは一旦接続を確立した後は、クライアント側からもサーバ側からも双方向に通信を行うことができます。
通信の方法には非同期通信といって、Webブラウザをリロードせずともブラウザの一部を更新することができる技術がありますが、クライアントからのリクエストに対し、サーバがレスポンスで返すという形には違いないので、双方向にリアルタイムで通信を行う仕様を実装するには不十分でした。
WebSocketを取り入れることによって、双方向にリアルタイムの通信、例えばストリーミングやリアルタイムチャットなどの実装が可能になります。
HTTP通信とソケット通信の記事でも説明した通り、WebSocketはクライアント側からしかリクエストできないHTTP通信の弱点を補う形になります。
WebSocketという技術は実際のアプリケーション開発で使われており、これまでHTTP通信やAjax通信ではできなかった実装を可能にしています。
LINEのようなリアルタイムチャットでコミュニケーションがとれるのも裏ではこのWebSocketのような新しい技術が使われているのです。
■参考