pubsub パターンを使用してリアルタイムWebチャットを開発しています。具体的には、pythonとバックエンドにトルネード-redis、フロントエンドにwebsockets(WS)(トルネード)を使用しています。WS接続のオープンイベントとクローズイベントがあるので、現在のオンラインユーザーリストを保存するのに最適なソリューションは何ですか。
ここにいくつかの論文があります:
ソリューション:
{"hash of current connection" : "username"}
。 hset WSの開始時(ユーザーが接続する)、 hdel WSの終了時(ユーザーが切断する)。 (+)現在のオンラインを取得する必要がある場合は高速、(-)ユーザーが切断し、データベース接続が失われると同時にDB情報が誤っている場合。どのソリューションが私の要件を最もよく満たしていますか、それともより優れたソリューションがありますか?
私はランダムにこの質問に出くわしましたが、これは私がそれを行う方法です:
users
テーブルで、lastActivity
という列を作成し、DateTime
タイプにします。
WebSocket経由で接続する場合は、クライアントにソケット接続を認証してもらいます(authToken
を送信するなど)。認証時に、user
のIDを接続のプロパティとして設定します。
認証後、クライアントにサーバーに定期的にメッセージを送信させます。
サーバーがメッセージを受信したら、ユーザーのlastActivity
を更新し、接続に設定したIDを使用して、メッセージを送信しているユーザーを見つけます。
これで、アプリケーションでlastActivity
フィールドを単に比較できます。たとえば、10秒より古く、10秒ごとにメッセージを送信するように設定している場合、ユーザーはオフラインと見なされます。