質問: チャットアプリを開発しています。 Webブラウザ版(for PC)とAndroid, iOSはアプリがあります。 それで、該当のチャットルームを開いている(厳密にはエンドユーザーが見ている)場合には通知を送らないようにしています。ただ、その判断が結構複雑で 1 チャットルームを開いていない 2 アプリがrunningな状態(アプリのみ) 3 ブラウザではタブがactiveな状態 といった制御を入れており、 ・画面を開いた ・タブから離れた ・アプリがstop(resume)した などのタイミングでサーバーにチャットルームを開いているか?のフラグを送信、新規投稿イベント時にフラグを見て通知(push通知、desktop通知)を送信するかどうかを判断しています。 ただ、このフラグの上げ下げが複雑なゆえにバグが結構発生していてなやまされています。 もし、この部分を以前開発したことがあって、ベストプラクティスをご存知の方がいたら教えていただけないでしょうか? ちなみにWebSocketは通っています。 理想をいえば、フラグを使わずに、通知発行時にwebsocketを通してユーザーがチャットルームを開いているか?を取得したほうが処理はシンプルなのでしょうが、パフォーマンス諸々どうなのだろうかと疑問に思っています。
回答: チャットを開発したことはないのですが、、、、 例えば、フラグを使わない方法としては、 * サーバはチャットルームに接続しているユーザすべてにメッセージを送る。(アクティブ・非アクティブ関係なく) * クライアント自身が判断して通知できるのであれば、自身に通知する。 * クライアント自身が判断して通知できないのであれば、サーバの通知APIを呼ぶ。(結果敵に、自身に通知が来る) のような設計のほうが、処理やデータの流れが統一されます。 パフォーマンスは、フラグの上げ下げをサーバ側で都度行うよりは向上するかと思いますが、 やってみないと分からないというのが正直なところです。