我已经在PHP / Ajax / MysqL中制作了一个简单的聊天应用程序.
我经常称这两种方法为:
setInterval("GetChatParticipants()",5000);
setInterval("GetChatMessages()",1000);
现在,根据客户端设计,没有“注销”或“退出”按钮,因此我想检测用户何时关闭浏览器,那时我必须从数据库中删除参与者记录.我不想使用onbeforeunload,因为Chrome拒绝在窗口卸载事件上接受Ajax请求.
因此,我正在考虑通过反复要求在Ajax中实施.但是问题是我该怎么做.我应该用last_active_time更新参与者表,如果当前时间与last_active_time之间的时差超过10分钟,那么我应该删除用户吗?这是一种实用的解决方案,还是会有更好的解决方案?
解决方法:
您拥有IMO的最佳解决方案.在Javascript中,创建一个“ ping”函数,每隔两分钟ping一次ping,并使用该浏览器/会话唯一的会话ID.在服务器上有一个会话表,并在收到ping时更新.使用另一个脚本查找长时间未ping通的条目,然后关闭会话.
我已经在一个站点上为数千个并发用户运行了这种结构,当负载比较重时(即在运行其余站点的同时在2个负载平衡的服务器上),我不得不将ping从1分钟降至每2分钟太).显然,您使ping大约是超时时间的45%(因此,如果一次失败,应该击中一秒).这是一个可以处理负载的简单过程.
编辑:不要对ping使用“ setInterval”,但是在每次ping返回或失败时使用用户“ setTimeout”.否则,使用setInterval,如果您的服务器负载太大,则ping队列将永远不会响应并再排队.由于使用了所有服务器插槽,因此服务器崩溃了,然后您无法通过ssh进行连接来修复它……这不是我为之骄傲的时刻.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。