gRPC Kotlin + MQTT Brokerでリアルタイムデーター配信

はじめまして、サーバー開発の J です。

新規プロジェクトの開発を担当しています。様々な技術を検討している段階ですが、チャット、キャラクターの移動情報…リアルタイム情報のデーター配信を gRPC Kotlin、MQTT(Message Queuing Telemetry Transport)Broker を組み合わせて実装してみました。その内容を紹介いたします。

 

概要

MQTT は TCP/IP による軽量なデーター配信プロトコルです。軽量、柔軟性、メッセージ品質調整… 様々なメリットがあり、複雑なロジックを組まず Pub/Sub 型データー配信ができるプロトコルです。

Pub/Sub 型データー配信は、ある topic (話題) にメッセージを publish (発行)、subscribe(講読)ができて、subscribe している多数のクライアントにデーターを配信することができます。

 

例えば、図のように MQTT Client A がある topic、topic/room/aaa に ”hello!” というメッセージをpublish すると、topic/room/aaa を subscribe していたクライアントは MQTT Broker を通して ”hello!” のメッセージを受信することになります。

 

 

ルーム(topic)、参加者(subscribe)、移動・チャット(publish)の例

 

構成

 

検討段階ではシンプルですが、今回試してみたサーバー構成です。

MQTT Broker

Pub/Sub 型データー配信にはメッセージブローカーが必要です。

MQTT Broker のサービス、アプリケーションは多くあります。

 

また、AWS IoT Core、Google Cloud IoT Core、Active MQ、Mosca などのライブラリを使ってアプリケーションサーバーに組み込むこともできます。
今回は Mosquittoを利用して実装しました。

 

Mosquitto( https://mosquitto.org/ )

 

gRPC Kotlin + Server Side MQTT Client

クライアントからリクエストの認証、ユーザー状態管理、ビジネスロジックの処理を行い MQTT Broker に publish, subscribe する役割です。アプリケーションサーバーは Kotlin gRPC で実装しています。
MQTT Broker にデーター配信する部分は spring-integration-mqtt を組み合わせで実装しました。

 

spring-integration-mqtt( https://spring.pleiades.io/spring-integration/reference/html/mqtt.html

 

リアルタイム情報を配信する流れ

 

主なリアルタイムデーター配信する流れは下記のようになっています。

 

  1. クライアントのアクションが発生してその情報を gRPC にリクエストする
    (ルームに参加、チャットメッセージ送信、キャラクターの移動)
  2. アプリケーションサーバーはリクエストをもらって認証処理、DB 処理を行う
  3. gRPC レスポンスはリクエストによってルームの状態、subscribe する topic 情報などを返す
  4. またアプリケーションサーバーでリクエストによって同じルームに接続しているクライアントにデーター配信が必要だと判断した場合は MQTT Broker に配信データーを publish する
  5. topicをsubscribeしているクライアントはMQTT Broker経由でリアルタイム情報を受信して処理する

 

※ アプリケーションサーバーで MQTT Broker を subscribe している部分があります。上記の流れには書いてありませんが、MQTT とクライアントの接続が切れた時にルームの退室処理で利用しています。

 

最後に

テスト用のアプリで MQTT を利用したクライアントのチャット、キャラクター移動情報のリアルタイムデーター配信を実装してみました。
MQTT プロトコルの特性を利用し簡単にリアルタイムデーター配信の実装ができて楽ですね。

 

まだ新規プロジェクトはリアルタイム配信を含め、構成の検討段階で、リリース時には違う構成になるかも知れませんが、今度リアルタイムデーター配信が必要な案件などがあれば使ってみるといいかと思います。

 

 


 

ココネでは一緒に働く仲間を募集中です!

ご興味のある方は、以下のリンクから是非ご応募ください。

 

ココネ株式会社 採用情報

サーバーサイドエンジニア(ジュニア)

サーバーサイドエンジニア(シニア)

Category

Tag

%d人のブロガーが「いいね」をつけました。