【问题标题】:Log users activity on a PHP MySQL platform [closed]在 PHP MySQL 平台上记录用户活动 [关闭]
【发布时间】:2012-10-18 19:21:18
【问题描述】:

我基于以下想法开发了一个服务器-客户端应用程序:

客户端(Windows 应用程序)与服务器(PHP 网页)一起工作,主要类似于基于套接字的客户端-服务器应用程序。客户端将原始数据发送到 PHP 网页,PHP 脚本将检查/处理接收到的数据,最后脚本向客户端返回答案(数据接受/拒绝/等)。

基本思想是 client 每 X 秒“ping”一次 server,即使 client 处于活动状态。记录客户活动的最佳解决方案是什么? 例如:

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 命令。我只是要求一种存储所有记录的好方法,以及一种从中检索一些信息的好方法。感谢您对帖子投了反对票,直到最后才阅读。

【问题讨论】:

  • What have you tried?你试过的有什么问题?
  • 到目前为止几乎一无所获,除了在谷歌上搜索了很多关于这个概念的信息......我没有一个好的起点来实现我的目标。正如我在问题末尾所说:我不知道如何制作我的 MySQL 日志表以及通过 PHP 在其中存储哪些信息以供将来报告。
  • 如何让客户端“ping”一个真正的 post/get 请求并记录该请求?
  • 客户端“ping”是一个真实的post请求。为任何客户每小时记录 3600 次“ping”怎么样?以及如何打破最终报告中的 50.000 条日志条目?
  • 会话变量是否在任何地方使用?设置一个会话变量,随着每个发布请求增加它,并在捕获发布请求的脚本中设置一个检查,以每 60 个计数将其记录到数据库?

标签: php mysql logging client


【解决方案1】:

@MoeTsao 的建议不错,考虑到您没有在“X 秒”中定义“X”。如果“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)

检查更新了多少行(请参阅您的编码手册)。

如果更新了一行,就完成了。如果没有更新,则要么是新客户端,要么是空闲客户端,然后您必须执行插入操作:

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

(与我的伪代码相反,请在查询中使用位置参数)。

创建报告很简单(所有必要的列都在您存储的行中),并留作原始海报的练习。 :)

【讨论】:

  • 好主意……正是我想要的。我喜欢 UPDATE + mysql_affected_rows() + INSERT 算法。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2017-07-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2019-04-09
相关资源
最近更新 更多