【发布时间】:2016-07-14 15:46:16
【问题描述】:
我正在制作一个拥有不同聊天室的网站。任何用户都可以随时创建聊天室,并且其他用户可以在聊天室可用时加入。最多两个用户可以同时在一个聊天室中聊天,但可以存在多个聊天室。
我正在使用 AngularJS 和 PHP,以及用于聊天功能的 PubNub API。创建的聊天室将存储在 MySQL 数据库中,具有以下字段:
- User1:创建聊天室的用户。如果它离开,它可能会改变或成为
null。 - User2:首先是
null,并将存储加入聊天室的人的用户名。 - 已关闭:当两个用户都离线时,为真(1),则没有人可以加入了。
当任何用户离开聊天室时,我必须更新“user1”或“user2”列。然后,检查两个用户是否离线,然后更新关闭的值。
例如,我知道我可以通过 AJAX 每 60 秒调用一次 PHP 函数来保存用户的最后一次连接。甚至我可以通过在同一个函数中检查他的最后一个连接来检查另一个用户是否仍然在线,但是谁会调用该函数来检查最后一个用户是否离开?
我想知道我是否必须在每次任何用户请求可用聊天列表时都进行该验证,或者我必须使用其他方法来解决它。
我想我可以在每次用户加入/创建聊天室时在 PHP 中设置超时功能。该函数会将用户列更新为null,如果两者都是null,则更新关闭值。当用户在聊天室时,每 60 秒将调用另一个函数来推迟第一个函数。但我不知道这是否可能,以及是否可以使用共享主机。
希望您能帮助我,非常感谢您的关注。
【问题讨论】:
-
除非您使用 websockets,否则您拥有的唯一信号是最后一次请求的时间/日期。投票可能会有所帮助,但正如您发现的那样,它不会关闭聊天室。除了清理没有活跃用户的房间的计划任务之外,我没有看到一个好的解决方案。
-
同意 Kevin 关于 websockets... -side.