PHP/MySQL and State


PHP/MySQL and State

我正在制作一个PHP&MySQL(和CodeIgniter)视频/聊天程序,1)显示当前在线用户,2)制所有用户在主持人离开时断开连接。

但是HTTP是无状态的。实现上述功能的最佳方法是什么?

我应该为每个用户使用心跳AJAX请求来确定当前状态吗?我如何知道用户(如主持人)是否断开了连接?

这需要接近实时的实现。你可以有一张创建了所有房间/聊天会话的桌子。然后,在用户表中,可以有一个主持人列和一个当前房间id列。

客房表

列:ID、USER_ID、CREATED_AT、UPDATED_AT、NAME、PASSWORD、HAS_MODERATOR(布尔)

当主持人加入会议室时,您可以将"HAS_moderator"字段更新为true或1。然后,您可以编写一个简单的长轮询脚本,只需向php页面或路由发出ajax请求,并返回true或false值。如果返回true,则主持人仍在会议室中,否则您可以关闭会议室并通过javascript或其他方式强制重定向。php脚本只需检查has_moderator是否为true,然后查看users表,检索所有主持人,并检查他们所在的房间。将主持人所在的当前房间与您要检查的房间相匹配。这将确保有一位主持人在场。

这可能会帮助您:通知Ajax/Javascript后台PHP已经完成

我认为您可以在不使用HTTP的状态逻辑的情况下实现它。您需要将当前会话状态存储在数据库中。每个用户请求都将有一个经过身份验证的用户名cookie和一个会话id,用于从后端数据库中提取会话。此外,还会有一个变量来检查主持人是否在场(检测信号样式检查)。当主持人离开时,只需更改会话状态,即可让所有其他人注销。如果你需要我建议的任何步骤的任何细节,请告诉我。