【问题标题】:Best way to save performance when getting realtime data获取实时数据时节省性能的最佳方法
【发布时间】:2017-10-26 07:07:02
【问题描述】:

假设 PHPFile.php 每 2 秒返回一次随机整数 (X)。

现在如果 X == 5 我想显示一个警报(客户端)。

以下代码将完成这项工作:

$(function worker(){

    $.ajaxSetup ({
        cache: false,
        complete: function() {
          // Schedule the next request when the current one's complete
          setTimeout(worker, 2000);
        }
    });

        $.ajax({
            type: "GET",
            url: "PHPFile.php",

            success:function(result){
                if (result == 5){
                alert('test');  
            }


        };
              });

现在的问题是,当我们每 2 秒调用一次时,它就像在破坏内存,特别是如果 PHPFile.php(在示例中)有大数据。

每分钟 30 个请求及其计数。

所以我想知道如果发生更改而不刷新浏览器,更新客户端浏览器的最佳方法是什么。

也许它就像 facebook 通知系统。

【问题讨论】:

  • 你应该看看 WebSocket like socketio with nodejs。客户端连接到服务器,因此他们只能在需要时与事件通信:) 示例:服务器更新一些数据,所以他发出一个事件,相关的客户端会收到通知,因此您可以在客户端执行一些操作
  • webSocket 在我的情况下并不是最好的,因为我们正在处理属于特定用户的数据。 webSocket 不处理与用户具有相同会话的 PHP 文件
  • 您可以按用户建立一个房间的系统,以便通知特定用户。您可以通过调用您的 php 在套接字连接处检查客户端提供的 cookie 并检查会话是否有效。我认为使用套接字对您的情况没有限制,这只是一点工作,但它完全适合您的需求

标签: php jquery ajax facebook


【解决方案1】:

您可能想看看使用 PHP 实现长轮询或使用 PHP 实现 Comet。

长轮询是传统轮询技术的一种变体, 允许模拟从服务器到客户端的信息推送。 通过长轮询,客户端向服务器请求信息 与普通民意调查类似的方式。但是,如果服务器没有 客户可用的任何信息,而不是发送空的 响应,服务器持有请求并等待一些信息 可用。一旦信息可用(或经过 合适的超时),一个完整的响应被发送到客户端。这 客户通常会立即从 服务器,因此服务器几乎总是有一个可用的 等待请求,它可以用来传递数据以响应 事件。

【讨论】:

  • 感谢您的回答,我会看看并回复。
  • 这就是我正在寻找的东西,但我很确定这与 facebook 使用的方法不同。因为它留下了与服务器文件的挂起连接,所以我们的 php 文件也不断向 mysql 查询。制作类似回调函数怎么样,所以当数据库中的值发生变化时,我们会处理这些变化。
  • 有帮助,但它是从 9 年前开始的。
  • quora.com/… 帖子来自 2014 年,但最后一个答案来自 2016 年
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多