2012-02-09 4 views
0

私は1つのチャットアプリケーションに1つのユーザーをホストできるようにしています。ほんの少しより多くのフィードバックを与えるために:ユーザーがページにいるかどうかをチェック

  1. ユーザーは、部屋(部屋が公開され、誰でも閲覧することができますが作成されますが、ユーザーがサインアップしていない場合、チャットが無効になり、ユーザーがチャットにサインアップするように求められます。 )

  2. 他のユーザーは、私があれば表示したいと思い、彼らは

をサインアップした順番に基づいてホストとのチャット

  • ユーザーの部屋のためにサインアップホストはオンラインかどうか。または、さらに進んで、ホストが部屋にいるかどうかを確認します。

    私はこれを行う方法がわかりません。

  • 答えて

    5

    基本的には、次のように動作します。

    ユーザーが操作(チャットの更新、メッセージの送信、ページの訪問など)を行うたびに、ユーザーに関連付けられたトークン(サーバーに保存されているトークン、DBなど)が現在の時刻に更新されます。

    | User ID  | Last action   | 
    ------------------------------------- 
    | 14 (mark) | 2012-02-09-10:34:53 | 
    | 56 (phil) | 2012-02-09-09:12:34 | 
    | 9 (john) | 2012-02-09-10:33:11 | 
    

    そしてあなたは彼のトークンが古すぎるではない場合、ユーザーがオンラインで決める(5/10分?)あなたはAJAXを使用する場合は、この方法を改善することができ

    はへの定期的な要求を送信します1分ほどごとにサーバーを起動します。このAJAXリクエストはトークン値を更新します。だから、この方法では、彼は何もしないで、そのページを見つめている場合でも、ユーザーがオンラインであると言うことができます。そして彼が終了すると(ブラウザーまたはタブを閉じる)、AJAXの定期的な呼び出しが停止するので、5分後にユーザーはオフブロウと宣言されます。

    幸運を祈る!

    +0

    私はテーブルを作成し、ホストのアクションを送信し、そのユーザーのIDが特定の時間間隔内に何らかのアクティビティを持っているかどうかを確認する必要があります。 – Ciprian

    +1

    codeigniterでは、各コントローラアクションの前に[フィルタ](http://codeigniter.com/wiki/Filters_system)を使用して、ユーザーがログインしているかどうかを確認し、トークンがある場合は更新することができます。 @ciprian正確には – Flukey

    +0

    です。すでにユーザーのためのテーブルがある場合は、そのテーブルに新しい列を追加することもできます。あなたの選択: –

    1

    は、これらの操作を行い、あなたは5部屋の中の人(と1つ以上がアクティブになるようにバインドされている)を持っていると仮定します。ユーザーが取るすべてのアクションのための

    • (それはキーストロークまたは送信する実際のメッセージで)、サーバーに「ping」して(存在するというメッセージを送信して)、イベントが発生した時刻をデータベースに記録します。 (「...ユーザー入力された」Facebookはがしていることをどのようにに気づく - 。これはそれで順番に

    • をアヤックス私が思う)を経由して(そのアクションを送信するため、サーバーの応答は、ユーザのリストでは、 (現在の時間 - 最後のアクティブな時間=離れた時間)

    • 誰がオンラインであるかを知っていない、再構築するあなたのブラウザの "chat mate list"

    あなたは多数の可能性がありますities。 「5分を許可する」などのように、そのユーザーはアイドル状態です。 15分以上の時間差がある場合は、その人をオフにしてください。

    また、定期的にオンラインになっているユーザーの更新をサーバーにpingすることもできます。キーストロークやメッセージの送信ではなく、ハートビートと呼ばれることもあります。同じ手順を実行します。あなたがオンラインになっていることをサーバーに伝え、存在を記録し、チャット相手のリストを返させます。

    このアプリケーション(ブラウザチャット)では、オフラインであることをサーバーが認識していないため、ブラウザーを閉じてしまうなど、「ハートビート」とアクションを定期的に記録する必要はありません。

    ホストについては、ホストIDでその部屋にタグを付ける必要があります。ハートビートは彼がまだオンラインであるかどうかを教えてくれます。