使用一组有限的工具在客户端之间同步数据(没有websockets,线程数量有限)

时间:2015-03-21 13:37:16

标签: php ajax web websocket

目标我想实现

我需要实现某种订阅事件方法。确切地说,人们可以锁定表格中的单元格(更多用户可以同时查看同一个表格),当其他人锁定单元格时,需要更新表格。 (因此用户不要多次尝试锁定同一个小区。)至少有45-50个用户。 (有多个表(在有限数量的单独网页上,加载了AJAX - 使用JSON传输,我编码服务器端。)

限制,资源和想法

  • 我没有带宽和磁盘空间限制。可用服务器的磁盘IO为2MB / s,内存为768MB(这是可用的)。
  • 我必须支持不支持websockets的旧版Chromium(我相信3)。我必须回到Long-Polling或任何其他技术。
  • 网页在共享主机上运行,​​限制为15个PHP进程。这意味着使用标准的长轮询技术只能支持页面上最多7-8人,这对于这个项目是不够的。
  • 此主机提供商无法使用Node.js.

我有以下想法:

使用频繁运行的CRON作业我可以生成json字符串并将其写入文件 - 客户端可以定期下载json文件,并在发生更改时更新表。

我知道这听起来并不优雅,所以在我实施上述计划之前,我决定四处询问。

感谢您的任何想法/帮助, 巴林特

1 个答案:

答案 0 :(得分:1)

使用这组服务器端限制,您可能只想在客户端中使用轮询。客户端将发出ajax调用,要求更新计时器。每次收到ajax调用时,服务器都会向客户端提供最新状态。您必须根据要支持的比例手动调整客户端轮询的频率(更高的比例表示轮询间隔之间的时间更长)以及比例对服务器端限制的影响。

客户端轮询对于带宽使用是不利的,因此您必须量化您可以使用的内容(测量N个客户端以特定间隔轮询使用的带宽并相应地调整轮询频率)。

显然,更多现代技术,例如持续连接的webSockets甚至长轮询,都会为您提供更好的响应能力和更低的带宽使用率,但是由于您的服务器端限制,您似乎已经排除了这些技术。首选解决方案是修复服务器端限制。如果您使用socket.io,它将自动回退到不支持webSockets的客户端的长轮询。