所以我们说的是每秒至少 1k 个请求。即使对于功能强大的机器,这已经被认为是相当高的负载。那么每个请求需要做什么呢?
在这种情况下,您几乎消耗了所有可用资源(包括文件 i/o)。此外,您正在消耗大部分 Web 服务器资源以获得一些可能不是您最常用的功能的附加值。
什么是更好的方法?
您想对更改做出反应,而不是轮询它。因此,对于每个用户,我们都会有一个包含其事件的通道,并且当事件发生时,我们希望服务器通知我们。不幸的是,正如另一个答案中提到的,这不是 PHP 的强项。
对于客户端,您可以查看SockJS并将其与Node.js或Vert.x配对。您可以免费获得所需的所有架构,而且设置起来并不难。SockJS 还带有一组很好的协议测试,所以很容易拥有自己的服务器端实现。
通过这些更改,每个用户对 SockJS 提供者只有一个请求,如果需要,您可以独立扩展它。主要服务也不会被 JSON 调用中断。所以我们最终得到
- 每页加载一个请求到 SockJS 提供程序
- 每次更改从 PHP 向 SockJS 提供者发出一个请求
它确实使身份验证有点棘手,但是您可以拥有一个 PHP 应用程序和 SockJS 提供者都知道的私钥,并使用它来签署一些 cookie。然后,您可以通过 JSON 请求传递该 cookie。