Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 过了一分钟就扔掉用户?_Javascript_Php_Mysql_Sql - Fatal编程技术网

Javascript 过了一分钟就扔掉用户?

Javascript 过了一分钟就扔掉用户?,javascript,php,mysql,sql,Javascript,Php,Mysql,Sql,我想做一个“特殊”类型的留言簿,一次只有一个随机的客人可以写一些东西。当用户进入留言簿时,它会被其他用户锁定-其他用户不能写入,但他们可以读取以前的所有条目 “声称”留言簿的用户有一分钟的时间写评论。当时间流逝或他发表评论时,他会自动被锁定在页面之外,留言簿将可供下一个用户使用。当你试图写信给留言簿时,无论你是否发表了评论,你都无法在留言簿上写下半个小时的内容(但你仍然可以像平常一样查看每个条目) 我怎样才能做到这一点?我听说我必须使用像cronjobs这样的东西,但这真的是我需要的吗?如果有人

我想做一个“特殊”类型的留言簿,一次只有一个随机的客人可以写一些东西。当用户进入留言簿时,它会被其他用户锁定-其他用户不能写入,但他们可以读取以前的所有条目

“声称”留言簿的用户有一分钟的时间写评论。当时间流逝或他发表评论时,他会自动被锁定在页面之外,留言簿将可供下一个用户使用。当你试图写信给留言簿时,无论你是否发表了评论,你都无法在留言簿上写下半个小时的内容(但你仍然可以像平常一样查看每个条目)


我怎样才能做到这一点?我听说我必须使用像cronjobs这样的东西,但这真的是我需要的吗?如果有人能给我一些建议(不要期望完整的解决方案),那就太好了。

首先,我建议用Java做这项工作,假设你有一个应用程序连接到的中央服务器

如果没有,您可以在数据库中进行管理。你要做的是锁上桌子。是关于锁定表的信息

解锁表也很重要

一种方法是在线程中等待60秒,然后执行解锁。另一种可能性是让数据库通过


我会注意到,您在使用此类应用程序时要非常小心。如果任何组件出现故障或表现不符合预期,则表上的锁可能不会被释放。这就是我建议在服务器端执行此工作的原因之一。此外,您似乎只有一个元素正在被更改;将关系数据库的机制用于单个元素通常是过分的。

因此,让我总结一下

  • 您希望让用户能够在留言簿中写入内容
  • 此人只有1分钟的时间发送此消息
  • 然后用户将被重定向到某个地方
  • 下一个人就可以写东西了
解决方案:

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

如果一个用户试图发布某些内容,但另一个用户正忙于键入,则可以将该用户id添加到数据库内的自建排队系统中。然后计算排队用户数乘以1分钟


这就是您想要的吗?

您需要在体系结构中定义一些东西来实现这一点。最终,这取决于网站的交互流程

建议的体系结构-服务器端语言(建议Java)、WebSocket、数据库和计划任务(Cron、计划任务等)

  • 你有你的留言簿页面
  • 当用户访问评论部分时,网站会向服务器发送一个“锁定”命令,该命令将锁定所有其他用户。(理想情况下,您应该使用WebSocket,这样通信可以是双向的)
  • 如果锁定命令从服务器发送回查看器,则禁用注释框
  • 除了锁定注释框(readonly/disabled/etc),您还需要确保将锁持久化到服务器上的用户,以便使用API的任何人都无法通过API通过基于提交API请求的用户执行用户锁查找来写入留言簿
  • 一旦用户向他们的评论框中写入内容,您可以设置
    setTimeout
    ,在1分钟后,它将删除服务器锁,并提醒所有其他客户端锁已解除(启用他们的评论框)
  • 通过Java、cron等安排任务,以确保没有客户机拥有锁,并且数据库中没有设置锁

  • 这是一个棘手的实现,会有很多问题,因为如果服务器上仍然启用了锁,但没有客户端拥有锁,则可能会失去与服务器的通信以释放锁。

    我喜欢这样,这听起来像是一个非常简单的实现。但这似乎有点太简单了……如果我通过AJAX进行检查,难道没有人会故意阻止留言簿解锁吗?如果用户刚离开页面怎么办?哈哈,这就是为什么当一个新用户试图发布一些东西时,你会将时间+1分钟与当前时间进行比较。有了这个,一个新人可以很容易地解锁一个被锁定的留言簿,锁定的问题也就解决了。很抱歉我的回复太晚了——这似乎就是我想要的,也是我能(可能)真正意识到的答案。谢谢我试试看。