-2

次のアイデアに基づいて、サーバー クライアント アプリケーションを開発しました。

クライアント(Windows アプリケーション) は、ソケットに基づくクライアント サーバー アプリケーションのように、サーバー (PHP Web ページ)と連携します。クライアントが生データを PHP Web ページに送信すると、PHP スクリプトは受信したデータをチェック/処理し、最後にスクリプトがクライアントに応答を返します (データの受け入れ/拒否/その他)。

基本的な考え方は、クライアントがアクティブかどうかに関係なく、クライアントがX 秒ごとにサーバーに「ping」することです。クライアントアクティビティをログに記録するための最適なソリューションは何ですか? 例えば:

Client1 started application at Time1       and it "ping" Server for lets say 30 minutes, after that interval the Server stop receiving "pings" from the client;
Client2 started application at Time1+10min and it "ping" Server for lets say 40 minutes, after that interval the Server stop receiving "pings" from the client;
Client1 started application at Time1+35    and it "ping" Server for lets say 60 minutes, after that interval the Server stop receiving "pings" from the client;

** Server stop receiving "pings" from client means there is no activity for at least 1 minute

次のデータを提供できる最終レポートが必要です。

Client   |  Start at   |    End at   | Active
=========+=============+=============+========
Client1  | Time1       | Time1+30min | 30min 
Client2  | Time1+10min | Time1+50min | 40min 
Client1  | Time1+35min | Time1+95min | 60min 

MySQL ログ テーブルを作成する方法と、将来のレポートのために PHP を介してログ テーブルに保存する情報がわかりません。

質問/観察は大歓迎です。

編集: エントリをログに記録するための PHP コードは必要ありません。MySQL CREATE TABLE または SELECT コマンドは必要ありません。すべての記録を保存する良い方法と、それらから何らかの情報を取得する良い方法をお願いしたいだけです。最後まで読まずに投稿に反対票を投じてくれてありがとう。

4

1 に答える 1

1

「X秒」で「X」を定義しなかったことを考えると、@MoeTsaoの提案は悪くありません。「X」が約3600以上であれば、それほど悪くはないでしょう。たぶん、あなたは彼のアイデアを採用し、あなたの(現在精巧な)「X」の値に基づいて修正するのではなく、彼にうんざりしていることに反対票を投じましたか?のように...

次のようなログテーブルを作成します。

 client_id
 start_time
 end_time

次に、すべてのリクエストで、更新を実行します。

 update log_table
 set end_time = NOW()
 where client_id = $client_id
 and start_time >= date_sub(now(), interval 1 minute)

更新された行数を確認します(これについては、コーディングマニュアルを参照してください)。

1つの行が更新された場合は、これで完了です。何も更新されていない場合は、新しいクライアントまたはアイドル状態のクライアントのいずれかであるため、挿入を実行する必要があります。

 insert into log_table (client_id, start_time, end_time)
 values ($client_id, now(), now())

(私の擬似コードとは異なり、クエリでは位置パラメータを使用してください)。

レポートの作成は簡単で(必要な列はすべて保存している行にあります)、元の投稿者の演習として残されています。:)

于 2012-10-19T05:28:22.177 に答える