gpt4 book ai didi

php - 检测用户是否退出聊天

转载 作者:搜寻专家 更新时间:2023-10-31 20:48:05 24 4
gpt4 key购买 nike

我用 PHP/Ajax/MySQL 制作了一个简单的聊天应用程序。

我经常调用这两个方法-

setInterval("GetChatParticipants()",5000);
setInterval("GetChatMessages()",1000);

现在根据客户端设计,没有注销或注销按钮,所以我想检测用户何时关闭浏览器,那时我必须从数据库中删除参与者记录。我不想使用 onbeforeunload,因为 Chrome 拒绝接受有关窗口卸载事件的 Ajax 请求。

所以我正在考虑通过重复请求在 Ajax 中实现。但问题是我究竟应该怎么做。我应该用 last_active_time 更新 Participant 表吗?如果当前时间与那个 last_active_time 之间的差异比方说超过 10 分钟,那么我应该删除该用户吗?这是一个实用的解决方案还是可以有更好的解决方案?

最佳答案

在我看来,您拥有最佳解决方案。在 Javascript 中创建一个“ping”功能,该功能每分钟/两分钟等使用该浏览器/ session 唯一的 session ID 执行 ping 操作。在您的服务器上有一个 session 表,并在您收到 ping 时更新。使用另一个脚本查找长时间未被 ping 的条目并关闭 session 。

我已经在一个站点上为数千个并发用户运行了这种结构,当负载变重时,我不得不将 ping 从 1 分钟降低到每 2 分钟一次(这是在 2 台负载平衡服务器上运行其余服务器网站的)。很明显,您将 ping 设置为超时时间的大约 45%(因此,如果一个失败,应该会触发第二个)。这是一个可以处理负载的简单过程。


编辑:不要对 ping 使用“setInterval”,而是在每次 ping 返回或失败时使用“setTimeout”。否则,使用 setInterval,如果您的服务器负载过大,则 ping 队列永远不会响应并再排队。当所有服务器套接字都被使用时,您会遇到服务器崩溃,然后您无法通过 ssh 连接来修复它……这不是我引以为豪的时刻。

关于php - 检测用户是否退出聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11136289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com