我基于以下想法开发了一个服务器 - 客户端应用程序:
客户端(Windows应用程序)与服务器(PHP网页)一起使用,主要类似于基于套接字的客户端 - 服务器应用程序。客户端将原始数据发送到PHP网页,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命令。我只是想要一个存储所有记录的好方法,以及从中检索一些信息的好方法。感谢您对帖子进行了低估,直到最后才开始阅读。
答案 0 :(得分:1)
创建一个这样的日志表:
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())
(与我的伪代码相反,请在查询中使用位置参数)。
创建报告是微不足道的(所有必要的列都在您存储的行中),并留作原始海报的练习。 :)