一分钟过后扔掉用户?

时间:2016-11-19 14:45:21

标签: javascript php mysql sql

我想制作一种“特殊”类型的留言簿,其中只有一位随机客人可以一次写一些东西。当用户转到留言簿时,它会被其他用户锁定 - 其他用户无法写入,但他们可以读取所有以前的条目。

“声称”留言簿的用户有一分钟的时间来撰写他的评论。当时间过去或发布评论时,他会自动被锁定在页面之外,并且留言簿可供下一位用户使用。当您尝试写入留言簿时,无论您是否设法发表评论,您都无法在留言簿中写一些内容半小时(但您仍然可以像平常一样查看每个条目)。

我怎样才能做到这一点?我听说我必须使用类似cronjobs的东西,但这真的是我需要的吗?如果有人可以给我一些指示(不要期待整个解决方案),那就太棒了。

3 个答案:

答案 0 :(得分:1)

所以,让我稍微总结一下......

  • 您希望让用户能够在留言簿中写一些内容。
  • 此人只有1分钟发出此消息
  • 然后用户将被重定向到某个地方
  • 下一个人可以写点什么

解决方案:

你可以做的是设置一个数据库,让每个用户都有一个会话,使用session_start();然后使用当前时间将session_id()写入数据库。然后,每20秒左右让ajax调用检查一次。然后删除此session_id并锁定该用户的控件。

如果用户尝试发布某些内容但其他用户正忙于输入,则可以将该用户ID添加到数据库内的自构建排队系统。然后,您应该计算排队用户的数量乘以1分钟。

这就是你想要的吗?

答案 1 :(得分:0)

首先,我建议您使用Java进行此项工作,假设您有一个应用程序连接到的中央服务器。

如果不是,您可以在数据库中进行管理。你想要做的是锁定表。 Here是有关锁定表的信息。

解锁桌子也很重要。

一种方法是在一个线程中等待60秒然后解锁。另一种可能性是让数据库通过event来完成工作。

我会注意到你希望非常小心这样的应用程序。如果任何组件发生故障或没有按预期运行,则表中的锁定可能不会被释放。这是我建议在服务器端执行此工作的一个原因。此外,您似乎只有一个元素正在被更改;对单个元素使用关系数据库的机制通常是过度的。

答案 2 :(得分:0)

您需要在架构中定义一些内容才能实现此目的。最终,它归结为您网站的互动流程。

建议的架构 - 服务器端语言(建议Java),Websockets,数据库和计划任务(Cron,计划任务等)

  1. 您有留言簿页面。
  2. 当用户访问评论部分时,网站向服务器发送“锁定”命令,该命令将锁定所有其他用户。 (理想情况下,你会使用websockets,因此沟通可以是双向的)
  3. 如果LOCK命令从服务器发送回观众,则禁用评论框。
  4. 除了锁定注释框(readonly / disabled / etc)之外,还需要确保锁定持久保存到服务器上的用户,以便使用API​​的任何人都无法通过api写入留言簿基于提交api请求的用户的用户锁定查找。
  5. 用户在写入评论框后,设置setTimeout,1分钟后删除服务器锁定并提醒所有其他客户端锁定已被解除(启用其评论框)。
  6. 通过Java,cron等进行计划任务,确保没有客户端拥有锁,并且没有在数据库中设置锁。
  7. 这是一个棘手的实现,并且会有很多陷阱,因为如果服务器上仍然启用了锁,但没有客户端锁定,则可能会丢失与服务器的通信以释放锁。