質問: サーバーの情報が、更新されたらクライアントの情報をリアルタイムに更新するプログラムを作成しようと考えています。 その際に、WebSocketを利用したいと考えているので、サーバー側からクライアント側へのイベント発火について教えていただきたいことがあります。 サーバーのDBに書き込まれたら、WebSocketを通じてクライアントに通知を行おうと思っているのですが、下記の2つの方法を考えてみました。 **1.**WebSocketのサーバー側のプログラムにて、サーバー上で、定期的にDBに書き込まれたかを確認し、クライアントに通知を行なう方法 ・サーバーサイド(WebSocket DBチェック[timerなどの利用しチェック] → Client通知) → DBをチェックするタイミングがあるのでリアルタイムではない気が...。 **2.**DBに書き込みを行ったプログラムが、WebSocket側になんらかの通知を行い、WebSocketを通じてクライアントに通知する方法(なんらかの通知というところが全然、検討できてません) ・サーバーサイド(DB書き込みプログラム(WebSocektへ通知) → WebSocket → Client通知) どういった方法が理想的かわかりませんが、こういったサーバー側からの変更があった場合、接続されているWebClientに対して、WebSocketを利用して何からの通知を行なう方法というのは、他にどんな方法が考えられますでしょうか?
回答: 裸の websocket ではなく、たとえば WAMP で実装するとします。 * データベースを管理するサービス(以降、サービスと呼ぶ)は更新や問い合わせをRPCで受付 * データを更新するクライアントは RPC でサービスを呼び出してデータ更新 * データを表示するクライアントは最初の1回はRPCでサービスを呼び出してデータを取得 * サービスは更新通知をPub/Sub で配信 * データを表示するクライアントはデータの更新を Pub/Sub で受信し、データが更新されたタイミングで即時に表示を更新 みたいな感じではないでしょうか。サービスが Pub/Sub でデータの更新を通知するわけですが、定期的に更新されているかをポーリングするのではなく、RPCで更新を受け付けた時にデータベースを更新すると同時に Pub/Sub に「更新されたよー」という通知を配信する実装になると思います。