2017-03-04 8 views
0

私は実際に現在のユーザーを表示する必要があるチャットアプリケーションを構築しています。ユーザーがログインまたはログアウトしたときに値が1から0の間で切り替わるdbの列「IsOnline」があります。私は、現在オンラインになっている最新のユーザーを得るために15秒ごとにapiにヒットする機能が必要です。 シグナルとSQLの依存関係をサポートしていないエンティティフレームワークを使用しているので、私はこのようにすることに決めました。 私はセッション中にユーザーがいる限り、別のスレッドで15秒ごとに実行されるメソッドを使用して、他のcrud操作に干渉しないようにする方法はありますか。チャットアプリケーションのタイマー機能

答えて

1

15秒後のポーリングは、特にあなたのコールがDBにある場合には良い解決策ではありません。このアプローチのレイテンシについて考えてみましょう。私はあなたが15秒後にdbを呼び出すのではなく、異なるアプローチを探す必要があると思います。

オンライン/オフラインでチェックしたい場合は、DB内に保持するのではなく、永続的にメモリ内の状態を維持します(DBに保存する場合は1時間後または2時間後に保持します)。

+0

別のアプローチですか?あなたがここで何らかの方向で私を指し示すなら、助けになるでしょう。 –

1

メモリにステータスを格納します(memcachedやredisなど)。クライアントに15秒ごとにリクエストを発行させる。オンラインステータスは一時的なものであり、DBに格納する必要はありません。

アプリのアーキテクチャについて説明していないため、アドバイスするのは難しいです。

一般に、プレゼンス通知の効率的な実装は難しいです。あなた自身のものを開発するのではなく、棚から何かを取るほうが簡単かもしれません。

関連する問題