2017-10-15 6 views
0

私はチャットアプリを作っており、ユーザーの横にオンライン/オフラインのシンボルを表示する機能を追加したいと考えています。最小限のリカバリ要求とデータベース書き込みで確実にこれを行うことができますか?ユーザーが急行でオンラインになっている場合はどうすれば表示できますか?

私が見つけた1つの方法は、ユーザがページをリクエストするたびにユーザ文書のlastSeenAtフィールドを更新し、これを使用してユーザがオンライン/オフラインであるかどうかを示すことでした。もう1つの方法は、一定の時間間隔でクライアント側からサーバーにpingを行い、lastSeenAtフィールドを更新することです。

この両方の方法では、多くのデータベース書き込みおよび/またはサーバー要求が必要になります。これをより効率的に行う方法はありますか?

答えて

0

Express.ioには、HTTPコールとソケットを組み合わせることができます。 (リアルタイム通信に最適な方法はSocketsです)。

1

ウェブソケットやサーバー送信イベントなど、変更に応じてサーバーからクライアントにデータをプッシュする必要があります。 socket.ioは、このような機能を実装するための一般的なツールです。

socket.ioまたは特にウェブソケットを使用すると、クライアントが接続されているかどうかを追跡し、クライアントが接続するか、 が切断されるたびに追跡するデータベースにフラグを設定できます(クライアントは複数の接続

複数のステートレスWebサーバ(一般的なプラクティス)を使用していると仮定すると、クライアントが接続または切断すると、他のユーザに通知したいと考えていますRedis、zeromq、AWS SNS、GCP Cloud Pubsubなど多くの実装がありますが、を使用することもできますあなたのpubsubとして

しかし、これはサーバーとの接続が頻繁に行われる可能性があるため、スケーラビリティが損なわれる可能性があります。それがあなたのために高価であることが判明した場合、あなたのlastSeenAtアプローチに何らかの正当なポーリングがあります。あなたはいくつかの実験を実行するだけで、あなたの設定でよりうまくいくかを知ることができます。

データベースの書き込みと要求が心配な場合は、いつでもサーバーを追加できます。あなたは、特にあなたのメインサーバーがそれほど大きな影響を受けないように、特にこれのためにデータベースを持つことができるように、これ専用のマイクロサービスを持つことができます。パフォーマンスが心配な場合は、インメモリ・データベースを使用できます。

シンプルな時間ベースの無効化を使用してサーバーにキャッシングを行うことも、pubsubパターンでサーバー間のオンライン/オフラインデータを同期することもできます。

設定をできるだけ簡単にすることをお勧めします。実験を実行して、予想されるトラフィックの処理方法を確認できます。

関連する問題