1

我正在尝试在我的应用程序中显示在线用户列表。让我解释一下我的要求。我有一个 Mysql DB 表,其中存储了用户名列表及其状态模式(1 或 0)。我有两个 php 页面。一种是列出所有用户名和状态模式。第二页用于编辑用户模式从 1 到 0,反之亦然。现在我从不同的系统打开这两个页面。如果我从一个系统更改一个用户(编辑页面)的状态,那么它会自动反映到另一个系统,在该系统中打开列表页面,更新记录,显然这应该在刷新列表页面之前发生。就像 gtalk 聊天用户一样。

我不是在问代码,但请帮助我如何继续解决问题。显然,cronjob 是其中一种解决方案,请提供另一种解决方案。

提前致谢。

4

2 回答 2

1

好吧,cronjobs 实际上不是您需要的。

使用 cronjobs,您可以安排任务。您想要的是在找到新信息时进行客户端刷新。虽然 cronjobs 是服务器端的并且总是在一个时间间隔内。

您需要的是pollingcommet

首先,轮询,您使用客户端每 x 秒执行一次脚本,并查看是否有新信息(我认为浪费资源)。

Commet,现在是一个更好的解决方案。但往往难以实施。我用pusher 来做这种东西。您可以将消息推送到(所有)连接的客户端并说有新信息。然后他们会更新或随着消息而来的还有新信息

于 2013-05-30T06:25:57.857 回答
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")which 返回一个已经解析的对象。

然后使用返回的数据更新用户列表。并每 5-20 秒刷新一次。

请记住,这根本不是一种有效的方式,如果有很多客户使用您的服务,这将无法正常工作。

于 2013-05-30T06:27:17.967 回答