-1

我想在我的网站上创建一个页面,其中将为每个访问者显示一个唯一的数字(1、2、3 等等......)。

例如,如果访客 A 首次连接,则将显示数字“1”。那么如果访客B同时连接,就会显示数字“2”。

但这是困难的部分:如果访问者 A 与网站断开连接,下一个访问者 (C) 将在页面上看到数字“1”(如果同时没有其他访问者连接)。

一些“编程之神”可以帮助我这样做吗?

非常感谢 !克里斯。

4

3 回答 3

0

您不会与网站“连接”和“断开”。您进行 HTTP-Call 以获取页面,然后没有进一步的通信。每个 HTTP-Call 都是单独的连接和断开连接。

但是:您可以使用 AJAX 每隔一秒左右检查一次,以告诉服务器您“还在那里”。(就像一个心跳信号)

可以做到,但不优雅。

问题(1):如果:A 得到 1,B 得到 2,A“断开”,C 得到 1 还是 3?,...

尝试:

用户拨打电话,在数据库中保存他的号码和“超时”时间(现在 + 3 秒),打开一个会话,在其中存储属于用户的行的“id”。

编写一个每秒执行 AJAX 调用的 Javascript 脚本,以便为用户更新数据库中的“超时”时间。

如何获得数字:

使用查询来检查数字是否在超时(计算“用户”的数量并检查您保存的“数字”的最大值是否等于那个,或者......)如果是这样,您可以给新用户一个更大的数字,否则您必须找到哪个数字没有被占用或重新从 1 开始(取决于您对问题 1 的回答)

问题2:你为什么要这样编程?

于 2013-10-22T08:52:06.940 回答
0

不确定您使用什么来跟踪用户,mysql、redis 或 svr 可以在请求之间保存数据,例如 nodejs。

无论如何,我认为你需要保留两件事,

  1. 按顺序返回的数字列表,如 [1, 5, 19 ...]
  2. 现在的访客总数,比如 20

因此,当有访客来时,请在一个线程中执行以下操作:

  1. 先查看返回的号码列表,如果不为空,弹出第一个返回;
  2. 或者,只是增加总数并返回新的数字。

当访客离开时,将其号码插入返回列表的右侧,并减少访客数。

于 2013-10-22T08:59:45.287 回答
0

因为 HTTP 协议stateless没有可靠的方法来实现这一点。

就服务器而言,我只是在下载页面及其内容时才真正连接。这可能涉及 10 个,如果不是数百个实际连接。一旦完成,我将断开连接。

我可能会盯着页面看 10 个小时,但我没有连接。

使用 PHP,您可能会考虑使用会话,将其存储在数据库中将允许您计算会话行数以获得下一个“连接数”,但这在这方面也是不可靠的。该会话是在我与创建会话的 php 脚本的第一次对话中创建的。该会话将存在并通过与您的脚本的后续对话进行刷新,但它会一直存在,直到它的超时期限到期。

在超时发生之前,我可能已经去了其他地方。因此,这对于您的要求也是不可靠的。

@SpazzMarticus 提到的 javascript 'heartbeat' 想法是有可能的,但因为我可以禁用 javascript,所以它也是不可靠的。它还会大大增加您的服务器负载,而收益却很小。想象一下,您有 1000 个用户查看您网站上的页面,即每秒 1000 次心跳检查,但收益甚微。由于您的服务器正忙于计算连接数,您会因为页面加载缓慢而失去多少其他用户。

简而言之,除非你准备好进行大量的开发和大量的试验和错误,否则我会忘记这个想法。

于 2013-10-22T09:07:02.893 回答