我已经使用 jquery 和 PHP 向网站添加了聊天功能,它似乎通常运行良好,但我担心可扩展性。我想知道是否有人有一些建议。我认为对我来说关键领域是有效地管理对谁在线的意识。
详细信息:我还没有实现长轮询(还),我担心 PHP (Apache) 中长时间运行的进程的原始数量会失控。
我的代码运行定期 jquery ajax 轮询(4 秒),它首先更新 db 以表示我处于活动状态并设置时间戳。然后有一个例程检查所有活动用户的时间戳并将那些外部(10 分钟)设置为非活动用户。从我目前的研究来看,这是相当正常的。但是,我担心如果我允许每个活动用户检查每个其他活动用户,然后每个人都更新数据库以启动非活动用户,那么我将得到重复的工作、记录锁定和不必要的服务器负载。
所以我已经实现了“清道夫”角色的想法。这只是其中一位在线用户,继承了清理人员的角色。其他人只是检查是否存在“清扫器”(数据库读取)并继续。如果他们检查时没有清扫器,他们就会让自己成为清扫器(DB 为自己的记录而写)。如果有多个,让自己“不扫地”,随机睡一段时间,然后再检查一次。
我的理论是,这种方式只有一个用户定期更新相关表上的几条记录,而其他人要么在阅读,要么只是在写自己的记录。所以它工作正常,但问题可能是该过程需要一些数据库读取,并且实际上可能比让每个人都像我提到的其他研究一样进行清理效率低。
到目前为止,我已经有超过 100 个并发用户运行良好,但客户希望扩展到数百个,甚至超过 1,000 个,我不知道现阶段这个想法是否好。
有谁知道这是否是一种好方法,是否可以扩展到数百个活跃用户,或者您是否可以推荐一种不同的方法?
顺便说一句,实际聊天消息的长轮询/彗星看起来很简单,我找到了一个很好的代码资源,但是有几个博客评论表明它特别是 PHP 和 apache 很危险。活动线程等。使用 usleep 和 session_write_close 将影响降至最低。
再说一次,有没有人有为数百名活跃用户设置 PHP 长轮询的实际经验,也许你可以放心!我真的希望将其迁移到 node.js(没有经验)吗?
先感谢您
托尼