我想制作一种“特殊”类型的留言簿,其中只有一位随机客人可以一次写一些东西。当用户转到留言簿时,它会被其他用户锁定 - 其他用户无法写入,但他们可以读取所有以前的条目。
“声称”留言簿的用户有一分钟的时间来撰写他的评论。当时间过去或发布评论时,他会自动被锁定在页面之外,并且留言簿可供下一位用户使用。当您尝试写入留言簿时,无论您是否设法发表评论,您都无法在留言簿中写一些内容半小时(但您仍然可以像平常一样查看每个条目)。
我怎样才能做到这一点?我听说我必须使用类似cronjobs的东西,但这真的是我需要的吗?如果有人可以给我一些指示(不要期待整个解决方案),那就太棒了。
答案 0 :(得分:1)
所以,让我稍微总结一下......
解决方案:
你可以做的是设置一个数据库,让每个用户都有一个会话,使用session_start();然后使用当前时间将session_id()写入数据库。然后,每20秒左右让ajax调用检查一次。然后删除此session_id并锁定该用户的控件。
如果用户尝试发布某些内容但其他用户正忙于输入,则可以将该用户ID添加到数据库内的自构建排队系统。然后,您应该计算排队用户的数量乘以1分钟。
这就是你想要的吗?
答案 1 :(得分:0)
首先,我建议您使用Java进行此项工作,假设您有一个应用程序连接到的中央服务器。
如果不是,您可以在数据库中进行管理。你想要做的是锁定表。 Here是有关锁定表的信息。
解锁桌子也很重要。
一种方法是在一个线程中等待60秒然后解锁。另一种可能性是让数据库通过event来完成工作。
我会注意到你希望非常小心这样的应用程序。如果任何组件发生故障或没有按预期运行,则表中的锁定可能不会被释放。这是我建议在服务器端执行此工作的一个原因。此外,您似乎只有一个元素正在被更改;对单个元素使用关系数据库的机制通常是过度的。
答案 2 :(得分:0)
您需要在架构中定义一些内容才能实现此目的。最终,它归结为您网站的互动流程。
建议的架构 - 服务器端语言(建议Java),Websockets,数据库和计划任务(Cron,计划任务等)
setTimeout
,1分钟后删除服务器锁定并提醒所有其他客户端锁定已被解除(启用其评论框)。这是一个棘手的实现,并且会有很多陷阱,因为如果服务器上仍然启用了锁,但没有客户端锁定,则可能会丢失与服务器的通信以释放锁。