我试图在我的应用程序中显示在线用户列表。让我解释一下我的要求。 我有一个Mysql数据库表,其中存储了用户名列表及其状态模式(1或0)。我有两个php页面。一个用于列出所有用户的名称和状态模式。第二页用于将用户模式从1编辑为0,反之亦然。 现在我从不同的系统打开这两个页面。如果我从一个系统更改一个用户(编辑页面)的状态,那么它将自动反映到打开列表页面的另一个系统,其中包含更新的记录,显然这应该在刷新列表页面之前发生。和gtalk聊天用户一样。
我不是在问代码,但请帮我解决问题。显然,cronjob是解决方案之一,请提供另一种解决方案。
提前致谢。
答案 0 :(得分:1)
好的cronjobs实际上不是你需要的东西。
使用cronjobs,您可以安排任务。您想要的是在找到新信息时客户端刷新。虽然cronjobs是服务器端,但始终是间隔时间。
第一个,轮询,你每隔x秒使用你的客户端执行一个脚本并查看是否有新信息(在我看来浪费资源)。
Commet,现在是一个更好的解决方案。但往往难以实施。我使用pusher来表示这种类型的东西。您可以将消息推送到(所有)连接的客户端,并说有新信息。然后他们会更新或者消息也会出现新信息
答案 1 :(得分:1)
要实现这样的目标,您应该在客户端使用JavaScript和Ajax。
尝试一下XMLHttpRequest。为了更容易,你可以使用像jQuery这样的东西。
在服务器端,您可以使用json传输数据。
从表中读取数据并将其放入数组中,我们称之为users
,键是名称,值是模式(1或0)。
然后使用json_encode(ARRAY)
:
//Echo the results in json format
echo(json_encode($users));
让我们说,用户'Frank','Susan'和'George'在线,'Isabell'和'John'在线。然后脚本将产生类似于此的输出:
{"Frank":1,"Susan":1,"George":1,"Isabell":0,"John":0}
当然你需要把这个和加载到另一个php脚本,也许是refresh.php。
并且,要从脚本中读取数据,请在视图页面中添加一些JavaScript。
使用XMLHttpRequest从刚刚添加的脚本中请求数据。
或者,如果您使用jQuery,则只需使用$.getJSON("NameOfTheScriptYouJustWrote")
返回已经解析的对象。
然后使用返回的数据更新用户列表。并每隔5-20秒刷新一次。
请记住,这根本不是一种有效的方法,如果有许多客户使用您的服务,这将无法正常运作。