LoginSignup
20
11

More than 1 year has passed since last update.

web開発における双方向通信プロトコルまとめ

Last updated at Posted at 2021-06-30

はじめに

IoTに関する業務を始めるにあたり、通信プロトコルについてよく分かっていなかったのでざっくり整理した。

双方向通信とは

チャットアプリが分かりやすいが、自分が何もしなくても(自分からリクエストを送らなくても)リアルタイムにメッセージが届く。これはサーバから任意のタイミングでクライアントへ通信が行われていることがわかる。

HTTPでは双方向通信できない

HTTPプロトコルはクライアント→サーバへの一方通行。
双方向通信-Page-4.png
サーバ側からすると、任意のタイミングでクライアントに通信を行うことができない。
サーバ→クライアントへ好きなタイミングで通信するためには、短時間間隔でクライアント→サーバにリクエストを送ったり、リクエストを送ったままサーバの返事を待ち続けるなど、ポーリング処理が必要。リアルタイム性に欠ける上、データのムダが多い。

双方向通信をするには

双方向通信をするためのプロトコルはいくつかあり、かつ以下の方法では同時接続も可能となる。
双方向通信-Page-4.png

TCP

双方向通信-Page-4 (2).png
アプリケーションレイヤを使わず素のTCPプロトコルで双方向通信する。
アプリケーションヘッダが必要ないので軽量。低レイヤ通信でモノ同士をつなぐときの選択肢。
HTTPではないので、ブラウザでは動かない。
双方向通信-Page-4 (1).png

MQTT

双方向通信-Page-4.png
ヘッダ情報が少なく軽量。少量のjsonデータのやり取りに最適。軽量ゆえ多数の同時接続時も安定している。モノ同士をつなぐときの選択肢。IoTの文脈でよく使われる。
HTTPではないので、ブラウザでは動かない。
双方向通信-Page-4 (1).png

WebSocket

双方向通信-Page-4 (1).png
HTTPプロトコルをアップグレードして、双方向通信を可能に。基本はHTTPなのでブラウザでも動く。ユーザー同士でリアルタイムにやり取りするアプリに使われる。IoTの文脈ではあまり使われない。
双方向通信-Page-4.png

MQTT over WebSocket

双方向通信-Page-4.png
WebSocketでコネクションを確立した後、さらにその上でMQTTプロトコルでやりとりする。
HTTP→WebSocket→MQTTとなるのでコネクション確立には要するデータ量は多いが、コネクションを確立したあとはMQTTでの軽量なやりとりが可能となる。
基本はHTTPなのでブラウザでも動く。ユーザとモノをリアルタイムにつなぐときの選択肢。UIとIoTを連携させるアプリに最適。
双方向通信-Page-4.png

参考にさせていただいたもの

20
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
11