使用一组有限的工具在客户端之间同步数据(没有 websockets,线程数量有限)
Syncing data across clients with a limited set of tools (no websockets, limited number of threads)
我想达到的目标
我需要实现某种订阅事件的方法。确切地说,人们可以在 tables 中锁定单元格(更多用户可以同时查看相同的 table),并且当其他人锁定单元格时需要更新 tables。 (因此用户不会尝试多次锁定同一个单元格。)我至少有 45-50 个用户。 (有多个 table(在数量有限的单独网页上,加载了 AJAX - 使用我在服务器端编码的 JSON 传输。)
限制、资源和想法
- 我没有带宽和磁盘 space 限制。可用服务器的Disk IO为2MB/s,Memory为768MB(这都是可用的)。
- 我必须支持不支持 websockets 的旧版 Chromium(我相信是 3)。我必须退回到长轮询或任何其他技术。
- 该网页在限制为 15 PHP 个进程的共享主机上运行。这意味着使用标准的长轮询技术最多只能支持页面上的 7-8 人,这对于这个项目来说是不够的。
- Node.js 不适用于此托管服务提供商。
我有以下想法:
使用频繁的 运行 CRON 作业我可以生成 json 字符串并将其写入文件 - 客户端可以定期下载 json 文件并更新 table 如果有变化。
我知道这听起来不太优雅,所以我决定在实施上述计划之前四处询问。
感谢任何ideas/help,
巴林特
由于服务器端存在这些限制,您可能只想在客户端中使用轮询。客户端将发出 ajax 请求请求更新计时器。服务器会在每次收到 ajax 调用时向客户端提供最新状态。您将必须根据要支持的规模(规模越大意味着轮询间隔时间越长)以及规模对服务器端限制的影响手动调整客户端轮询的频率。
客户端轮询不利于带宽使用,因此您必须量化您可以在那里使用的带宽(测量 N 个客户端以特定间隔轮询使用的带宽并相应地调整轮询频率)。
显然,更现代的技术(例如持续连接的 webSockets 甚至长轮询)将为您提供更好的响应能力和更低的带宽使用率,但由于您的服务器端限制,您似乎已经排除了这些技术。首选解决方案是修复服务器端限制。如果你使用 socket.io,它会自动回退到不支持 webSockets 的客户端的长轮询。
我想达到的目标
我需要实现某种订阅事件的方法。确切地说,人们可以在 tables 中锁定单元格(更多用户可以同时查看相同的 table),并且当其他人锁定单元格时需要更新 tables。 (因此用户不会尝试多次锁定同一个单元格。)我至少有 45-50 个用户。 (有多个 table(在数量有限的单独网页上,加载了 AJAX - 使用我在服务器端编码的 JSON 传输。)
限制、资源和想法
- 我没有带宽和磁盘 space 限制。可用服务器的Disk IO为2MB/s,Memory为768MB(这都是可用的)。
- 我必须支持不支持 websockets 的旧版 Chromium(我相信是 3)。我必须退回到长轮询或任何其他技术。
- 该网页在限制为 15 PHP 个进程的共享主机上运行。这意味着使用标准的长轮询技术最多只能支持页面上的 7-8 人,这对于这个项目来说是不够的。
- Node.js 不适用于此托管服务提供商。
我有以下想法:
使用频繁的 运行 CRON 作业我可以生成 json 字符串并将其写入文件 - 客户端可以定期下载 json 文件并更新 table 如果有变化。
我知道这听起来不太优雅,所以我决定在实施上述计划之前四处询问。
感谢任何ideas/help, 巴林特
由于服务器端存在这些限制,您可能只想在客户端中使用轮询。客户端将发出 ajax 请求请求更新计时器。服务器会在每次收到 ajax 调用时向客户端提供最新状态。您将必须根据要支持的规模(规模越大意味着轮询间隔时间越长)以及规模对服务器端限制的影响手动调整客户端轮询的频率。
客户端轮询不利于带宽使用,因此您必须量化您可以在那里使用的带宽(测量 N 个客户端以特定间隔轮询使用的带宽并相应地调整轮询频率)。
显然,更现代的技术(例如持续连接的 webSockets 甚至长轮询)将为您提供更好的响应能力和更低的带宽使用率,但由于您的服务器端限制,您似乎已经排除了这些技术。首选解决方案是修复服务器端限制。如果你使用 socket.io,它会自动回退到不支持 webSockets 的客户端的长轮询。