标签: icws

服务器发送的事件轮询导致长时间延迟

我有一个连接器,它将使用 cURL 和 PHP 调用 RESP API。

我需要每秒调用一个方法来检查新消息,然后处理它们。我使用以下两种方法来处理消息

  1. AJAX 轮询使用SetInterval():每秒调用一次 php 脚本。这工作得很好,除了我无法阻止多个SetInterval()浏览器的不同选项卡同时运行。(我不想让用户打开 10 个浏览器选项卡,这会导致一个用户SetInterval()同时运行 10 个浏览器选项卡。
  2. 服务器发送事件使用EventSource:一旦队列中有新数据,服务器将向浏览器发送更新。这会减慢响应时间。我对脚本的每次调用都需要大约 20 秒以上才能完成,这是一个问题。我不知道为什么会发生这种情况。

这是我的SetInterval()实现

function startCalls(){
    //update the screen using Intervals
    refreshIntervalId = setInterval(function() {

        $.getJSON("index.php", {'method': 'getMessages', 'jSON': true} , function(data){
            processServerData(data);
         });

    }, 1000);
}
Run Code Online (Sandbox Code Playgroud)

一旦用户登录,我就会调用此函数startCalls()

在 index.php 文件内我有要调用的代码

if($method == 'getMessages'){

    $messaging = new ICWS\Messaging($icws);
    $messaging->processMessages();
    $myQueue = $messaging->getCallsQueue();
    echo json_encode($myQueue );

}
Run Code Online (Sandbox Code Playgroud)

这是我的第二个实现“服务器发送事件”

//Server Side Message Polling
function startPolling(evtSource){ …
Run Code Online (Sandbox Code Playgroud)

javascript php jquery server-sent-events icws

5
推荐指数
1
解决办法
1629
查看次数

标签 统计

icws ×1

javascript ×1

jquery ×1

php ×1

server-sent-events ×1