はじめに
ネットワークの学習を始めると、
- Socket(ソケット)
- TCP
- HTTP
- WebSocket
など、似たような用語がたくさん出てきます。
この記事では、初学者向けに「ソケット通信とは何か」を
できるだけ分かりやすくまとめました。
対象者
- Socketって何か分からない方
- HTTPとの違いが分からない方
- API通信の裏側を知りたい方
- ネットワーク初学者
ソケット通信とは?
一言でいうと、以下の通りになります。
コンピュータ同士がデータを送受信するための仕組み
もっと簡単にいうと、通信するための窓口になります。
電話で例えると分かりやすい
電話をかけるときは
電話をかける
↓
相手と話す
↓
電話を切る
という流れになります。
ソケット通信も同じです。
接続する
↓
データを送る
↓
データを受け取る
↓
切断する
この流れで通信します。
ソケットとは?
ソケットとは通信するための窓口です。
イメージすると
あなたのプログラム
│
Socket
│
インターネット
│
Socket
│
相手のプログラム
ソケット同士が通信することでデータを送受信できます。
API通信でもソケットは使われている
例えば
fetch("/api/users")
を書いたとします。
私たちは「APIを呼び出している」と思っていますが、
実際の裏側では
① ソケットを作る
↓
② サーバーへ接続
↓
③ HTTPリクエスト送信
↓
④ レスポンス受信
↓
⑤ 接続終了
という流れになっています。
つまり、API通信もソケット通信の上で動いています。
APIとSocketの違い
ここは最初に混乱しやすいポイントです。
| API | Socket |
|---|---|
| 何をお願いするか | どうやって通信するか |
例えば
API = 店員への注文
Socket = 店員と話すための電話
というイメージです。
電話がなければ注文できないように、ソケットがなければAPI通信もできません。
TCPとの関係
ソケットは通信の窓口ですが、
実際にデータを届ける方法としてTCPやUDPを利用します。
アプリケーション
↓
Socket
↓
TCP / UDP
↓
IP
↓
インターネット
TCPとは?
TCPはデータを確実に届ける通信方式です。
例えば100文字送ったとして
途中で
こんにちは
だけ届いてしまったら困ります。
TCPでは
届いていません
↓
もう一度送ります
という仕組みがあります。
そのため
- Webサイト
- API
- メール
- LINE
などで利用されています。
ソケット通信 = TCP?
実は違います。ソケット通信は
通信する仕組み全体です。
TCPはその通信方法の一つになります。
Socket
├── TCP
└── UDP
HTTPとWebSocketの違い
ここも混乱しやすいポイントです。
HTTP
通信するたびに以下を繰り返します。
接続
↓
リクエスト
↓
レスポンス
↓
切断
例えば
- ログイン
- 商品一覧取得
- API取得
- ユーザー情報取得
などです。
WebSocket
一度接続したら接続を維持したまま通信します。
接続
↓
送信
↓
受信
↓
送信
↓
受信
↓
最後に切断
そのため
- LINE
- Discord
- Slack
- オンラインゲーム
- 株価表示
などで利用されています。
天気アプリで考えてみる
例えば以下ならHTTPです。
「今の天気を取得する」
理由は1回取得すれば終わるからです。
一方、以下ならWebSocketです。
「天気が変わったらすぐ通知してほしい」
理由はサーバーからリアルタイムに通知してもらえるからです。
通信方式はどう選ぶ?
以下のように考えれば良いと思います。
HTTP
必要な時だけデータを取得する
例
- ログイン
- 商品検索
- API
- マイページ
WebSocket
常に最新情報を受け取りたい
例
- チャット
- ゲーム
- 株価
- ライブ配信
- 通知
全体像
あなたのプログラム
│
▼
API(HTTP / WebSocket)
│
▼
Socket
│
▼
TCP / UDP
│
▼
IP
│
▼
インターネット
まとめ
- Socketは通信するための窓口
- API通信も裏側ではSocket通信を利用している
- SocketはTCPやUDPを利用して通信する
- HTTPは「1回通信して終了」
- WebSocketは「接続し続ける」
- 通信方式は「1回取得したいのか」「リアルタイム性が必要なのか」で選ぶ
おわりに
ネットワークの用語は似たものが多く、最初は混乱しやすいと感じました。
一つの考え方として「Socket」「TCP」「HTTP」「API」
それぞれの役割で整理すると理解しやすくなるかもしれません。
この記事が、ネットワーク学習で悩んでいる方の参考になれば嬉しいです。