【发布时间】:2013-01-17 21:55:12
【问题描述】:
我最近继承了一个使用 CodeIgniter 框架的 PHP 应用程序——它可以完美地处理身份验证、用户会话、CRUD 操作、路由、模板以及应用程序的几乎所有方面。但是,一项功能需要使用长轮询。某些管理员需要对其他用户的操作进行近乎实时的更新。现在几百个用户一切正常,但我们正在扩大以支持几千个用户,我担心长轮询会导致一些性能问题。
这里是长轮询过程的基础知识:
浏览器发出 GET 请求,启动长轮询过程。
长轮询进程每 1/4 秒检查一次 txt 文件的时间戳。
-
a) 如果更新了 txt 文件,长轮询过程将更改返回给浏览器并更新视图。
b) 如果在 25 秒内没有发现任何变化,则长轮询结束并返回 null。
重复步骤 1。
此过程发生在 codeigniter 框架之外。我认为用 socket.io 实现替换这个过程是个好主意。
socket.io 会比长轮询更好吗?如果是这样,在没有实际构建演示和进行负载测试的情况下,我有什么令人信服的证据?在我的脑海中这似乎是个好主意,但我需要证明做出转换的时间和精力是合理的。
另外,如果这没有意义,或者按照 SO 标准“不是一个真正的问题”,我们深表歉意。我对后端可扩展性还很陌生,而且大部分这些东西对我来说都是全新的。请在否决之前提供有用的指导以重新措辞(如果需要)。谢谢。
编辑:这里的首选是保持原样,因为撕掉代码并用新东西替换它的成本很高,尤其是当新东西未经测试时。所以我想我的问题是,当/如果长轮询解决方案碰壁时,socket.io 会是一个可行的替代品吗?
【问题讨论】:
-
我猜许多服务器线程轮询文件是这里的主要痛苦,而不是空闲的 TCP 连接。
-
PHP 的
filemtime函数用于轮询文件。在这一点上,它似乎不是很占用 CPU,但在规模上?
标签: php performance socket.io scalability long-polling