【问题标题】:Show real time data to users with same response time以相同的响应时间向用户显示实时数据
【发布时间】:2016-08-23 06:13:07
【问题描述】:

我怀疑显示实时数据的速度和延迟。

假设我想通过每秒触发 ajax 请求向用户显示读取时间数据,这些请求通过简单的集合查询从 MySql 表中获取数据。

为此,目前这两个选项在我脑海中浮现

  1. MySql / Amazon Aurora
  2. 文件系统

在这些选项中哪个更好?还是有其他解决方案?

正如我实际检查的那样,如果我们在浏览器中打开一个页面,那么 ajax 请求使用 PHP, MySql, Nginx 堆栈给出的响应小于 500ms

但如果我们打开更多页面,那么相同的 ajax 请求会给出超过 1 second 的响应,对于每个访问者来说,这应该小于 500ms

所以在这种情况下,如果访问者增加,那么 ajax 请求的响应就会很差。

我还检查了Node.js+MySql,但结果相同。

为记录创建json 文件并从文件中获取数据是否很好?还是有其他解决方案?

【问题讨论】:

    标签: php mysql ajax nginx amazon-aurora


    【解决方案1】:

    确实,您必须使用数据库来存储实际数据,但您可以轻松添加内存缓存(可以是内部字典或单独的组件)来跟踪实际更新。

    您的典型 ajax 请求看起来像:

    1. Memcache,我们对用户 123 有什么新东西吗?

    2. 上次更新是 10 分钟前

    3. 啊哈,没什么新鲜的,让我们返回 null;

    当你写数据时:

    1. 将数据放入数据库

    2. 更新内存缓存中客户端的上次更新时间

    实际密钥可能不同 - 例如聊天室ID。想法是仅在实际发生更新时才读取数据库。

    2 级:

    您将烧毁您的网络服务器以及大量调用的客户端互联网。你可以做点什么:

    DateTime start = DateTime.Now;
    while(Now.Subtract(30 seconds) < start)
    {
       if (hasUpdates) return updates;
       sleep(100);
    }
    

    比客户端每 30 秒调用服务器 1 次。 当服务器注意到有新数据时,客户端会立即得到响应。

    【讨论】:

    • 是的,Memcache 是个好主意。我正在检查是否使用 websocket 做同样的事情。但在 websocket 中对我来说具有挑战性的任务是检查最多可以同时连接多少个连接。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2011-07-30
    • 2020-11-30
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    相关资源
    最近更新 更多