2024 年 7 月 17 日開催の SORACOM Discovery 2024 に先駆けて、SORACOM Beam (以下 Beam) では WebSocket のサポートを 7 月 1 日よりリリースしていました。このブログでは、この Beam WebSocket の機能を解説します。Discovery 2024 の基調講演で発表されたサービスと同様に、皆さんに使っていただけると嬉しいです。
WebSocket についておさらい
WebSocket は、クライアントとサーバとの間での双方向通信を可能にする通信プロトコルです。低遅延な通信が求められるアプリケーションに適しており、例えば Web でのチャット、リアルタイムの通知、オンラインゲームなどで使われています。もし WebSocket 誕生の背景に興味があれば、Microsoft の解説が分かりやすくておすすめです 👍
IoTにおけるWebSocketの利用例
IoT における WebSocket の利用例として、EV 充電器で採用される OCPP が挙げられます。OCPP (Open Charge Point Protocol) は、EV 充電器と充電器管理システム間の通信プロトコルの標準で、通信に WebSocket を使用します。
最新の OCPP 2.0.1 に定義のある 3 つの Security Profile のうちの 1 つで TLS の使用が [強く推奨] とされています。一方で、過去から OCPP を利用している EV 充電器の中には、非 TLS での WebSocket 通信を行っているケースもあります。
データ転送サービス「SORACOM Beam」がWebSocketに対応
7 月 1 日のリリースで、SORACOM Beam は WebSocket 通信の転送に対応しました。SORACOM Beam は、IoT デバイスから SORACOM に送信されたデータを、任意のサーバーに転送するサービスです。Beam はこれまでデバイスからの UDP、TCP、HTTP 通信などの転送に対応しており、ここに WebSocket 通信の転送が追加された形です。
Beam と転送先との間の通信は Beam が暗号化するため、デバイス側で暗号化処理をしなくても安全な通信が可能です。これは今回の WebSocket 転送機能に限らない Beam の強みの 1 つです。デバイスと Beam 、Beam と転送先の間にそれぞれコネクションを確立し、それらを連結することでデバイスと転送先の間で WebSocket の通信を実現しています。
先の OCPP の例で言うならば、TLS 未実装の EV 充電器で Beam の WebSocket 転送機能を利用することで、Beam が代わりに通信を暗号化して EV 充電器システムのセキュリティを向上できます。既存のシステムに SORACOM IoT SIM を追加して、システムをアップグレードできるのです。
さっそく使ってみよう
Beam の WebSocket 転送機能はとても簡単にお試しいただけます。WebSocket 接続を受け付けるサーバーをお客様自身で準備しなくても、Beam 用にソラコムが提供しているテストサーバー (beamtest.soracom.io) を WebSocket 通信の転送先として利用できます。設定方法については Users サイト HTTPS テストサーバーと WebSocket で通信する をご覧ください。
ご注意いただきたい点は、[Web サイト エントリポイント] の設定を作成することです。Beam には複数のエントリポイントがありますが、WebSocket 転送をサポートするのは [Web サイトエントリポイント] だけです。
Beam 用テストサーバーとの WebSocket 接続が確立すると、WebSocket のリアルタイムな双方向通信を手元で実感できます。SORACOM IoT SIM を挿入したデバイスから打ち出したメッセージが、テストサーバーからオウム返しされる様子をぜひ体験してみてください。以下は WebSocket の CLI ツール wscat を使用した、Beam の WebSocket 転送の例です。
wscat -c ws://beam.soracom.io:18080/websocket Connected (press CTRL+C to quit) < Hello SORACOM Beam Client IMSI:xxxxxxxxxxxxxxx SIM ID:xxxxxxxxxxxxxxx ! > Hello from device < Hello from device >
注意事項
WebSocket の利用による追加の料金は発生せず、従来の Beam の料金体系と同じです。デバイス ↔ Beam 間の WebSocket コネクションの確立と、Beam ↔ 転送先間の WebSocket コネクションの確立にそれぞれ 1 リクエストが発生します。詳細はサービスページをご覧ください。
ポイントは、WebSocket 確立後のメッセージはリクエスト数に含まれない点です。デバイス ↔ 転送先の間の WebSocket が疎通した後は、Beam を介したメッセージングに料金は発生しません。その意味で Beam の TCP → TCP/TCPS エントリポイントの料金体系と似ています。 なお、SORACOM Air や Arc の通信料金は別途発生します。
Beam の WebSocket 接続では、300 秒間の無通信が続くと TCP Socket がタイムアウトします。また SORACOM のメンテナンスの影響で TCP コネクションが切断される場合があります。そのため、必要であれば再接続などの実装をお勧めします。その他、詳しい説明は Users ドキュメントをご参照ください。
最後に
実はこの WebSocket 転送機能の開発は EV 充電器業界の方からのご相談から始まったものでした。既存システムの改善に SORACOM のバイ・デザインのセキュリティを役立てていただける事例であり、ソラコムの開発ポリシー「Working backwards from the customer (お客様の声から逆算して考える)」を文字通りに体現したものでもありました。
幅広い皆様の IoT プロジェクトを少しでも後押しできれば幸いです。ぜひ、Beam の WebSocket 転送をお試しください!
― ソラコム 小林 (tau)