Pub/Sub方式によるチャットアプリの実装
Hexabase には、バックエンドからフロントエンドに、イベントを Publish する機能を備えています。この機能を活用すると、フロントエンドの UI 上で、アイテム更新時やコメント登録・CSV インポート完了時などをユーザーに知らせることができます。
- サンプルアプリケーション: hxChatt > https://github.com/b-eee/hxChatt
PubSub モデル
Hexabase には、バックエンド → フロントエンドにイベントを通知する仕組みがあります。 これは一般的な PubSub モデルに基づいており、SSE(Server Sent Events)技術を利用しています。
WebSocketとSSEの比較
PubSub の実装方式には、いくつかの技術があり、最もメジャーなものが WebSocket です。 Hexabase が採用している SSE(Server Sent Events)との主な違いは以下のとおりです。
WebSocket | SSE | |
---|---|---|
用途 | 汎用、リアルタイム系(ゲーム、チャット、Web など多様) | HTTP 通信を主とする Web 画面系(シンプル、用途限定、簡易) |
通信方向 | 双方向(Server <-> ブラウザ) | 片方向(Server -> ブラウザ) |
プロトコル | 独自 | HTTP |
パフォーマンス | 高速 | HTTP 通信と同等 |
仕様の安定性 | ほぼ安定 | 安定(HTML5 関連の仕様として定義) |
対応ブラウザ | ほぼすべてのブラウザが対応(古い IE8 以下は NG) | モダンブラウザ(IE11 は NG) |
切断時 | 再接続コードが必要 | 自動再接続 |
Hexabase の主なイベント
Hexabase がサーバーサイドから通知をする代表的なイベントは次の通りです。 このイベントは、Hexabase 内のマイクロサービス(notificator)がログイン User の権限をチェックしながら送信制御しています。
分類 | イベント | 発行タイミング | 主な通知内容 |
---|---|---|---|
Item 関連 | アクション実行(Item 作成、Item 更新など) | Item 更新時、新規作成時 | Item 関連情報 ID など、変更があったことが通知される |
コメント投稿 | Item へのコメント(History)投稿時 | 投稿されたコメントテキスト | |
CSV インポート | CSV 新規インポート | インポート完了時 | インポート成功/失敗/エラー情報など |
CSV 更新インポート | インポート完了時 | インポート成功/失敗/エラー情報など | |
アプリケーション | 新規アプリケーション作成、テンプレートの復元 | アプリケーション作成完了時 | アプリケーションの情報 |
イベントの通知先
Hexabase では、イベントを誰に通知するべきか、グループやロールを用いて設定することができます。これは、アイテム > アクションメニュー > 「この操作を誰に通知しますか?」で設定します。
通知先は、次のどちらかになります。
- アイテムを閲覧できる User(アクセスキーを所有する User) + チェックを付けたメンバー
- ロールをもつメンバが Subscribe している場合
コメント起票時のイベント通知とチャット実装
Hexabase UI は、Pub/Sub の仕組みを利用して、Item に対するコメント投稿時に、リアルタイムで再表示させることが可能です。