Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript php中使用睡眠线程和刷新页面作为服务器事件源的区别_Javascript_Php_Jquery_Ajax_Server Sent Events - Fatal编程技术网

Javascript php中使用睡眠线程和刷新页面作为服务器事件源的区别

Javascript php中使用睡眠线程和刷新页面作为服务器事件源的区别,javascript,php,jquery,ajax,server-sent-events,Javascript,Php,Jquery,Ajax,Server Sent Events,我已经使用服务器发送的事件构建了一个聊天应用程序。但是sse并不是所有浏览器都支持的。我计划使用长轮询ajax来轮询不支持sse的浏览器的源页面 服务器页面所做的是检查数据库中是否有新消息,并使用echo语句将其输出 通过使用标题(“refresh:X;”)每隔X秒刷新一次页面 我看到了另一种方法 while(1){ echo statemenst.... echo statemenst.... sleep(5); } 所以我的问题是:如果我发送了一个等待时

我已经使用服务器发送的事件构建了一个聊天应用程序。但是sse并不是所有浏览器都支持的。我计划使用长轮询ajax来轮询不支持sse的浏览器的源页面

服务器页面所做的是检查数据库中是否有新消息,并使用echo语句将其输出

通过使用
标题(“refresh:X;”)每隔X秒刷新一次页面
我看到了另一种方法

while(1){

    echo statemenst....
    echo statemenst....

    sleep(5);
    }
所以我的问题是:如果我发送了一个等待时间非常长的ajax请求,它会收到响应吗;或者我需要使用无限循环?如果页面刷新,等待响应的页面请求是否会受到影响

 function waitForMsg(){
        /* This requests the url "msgsrv.php"
        When it complete (or errors)*/
        $.ajax({
            type: "GET",
            url: "msgsrv.php",

            async: true, /* If set to non-async, browser shows page as "Loading.."*/
            cache: false,
            timeout:50000, /* Timeout in ms */

            success: function(data){ /* called when request to barge.php completes */
                addmsg("new", data); /* Add response to a .msg div (with the "new" class)*/
                setTimeout(
                    waitForMsg, /* Request next message */
                    1000 /* ..after 1 seconds */
                );
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){
                addmsg("error", textStatus + " (" + errorThrown + ")");
                setTimeout(
                    waitForMsg, /* Try again after.. */
                    15000); /* milliseconds (15seconds) */
            }
        });
    };

如果您正在使用会话,请确保在调用
sleep()
之前调用
session\u write\u close
。。否则,您将阻止所有请求,因为会话文件仍将被阻止写入。并且,如果页面刷新,ajax回调将从客户端消失(javascript将全部重新加载到DOM中)因此您失去了响应。@developerwjk AJAX调用是从另一个页面发出的,称为SERVER.PHP,其中包含无限循环或周期性刷新。因此,当SERVER.PHP周期性刷新时,如何处理请求循环应该是半无限的。也就是说,它一直循环,直到最后返回响应,然后循环停止。因此,您不希望
while(1)
而是希望
while($responseNotReady)
如果您正在使用会话,请确保在调用
sleep()之前调用
session\u write\u close
。。否则,您将阻止所有请求,因为会话文件仍将被阻止写入。并且,如果页面刷新,ajax回调将从客户端消失(javascript将全部重新加载到DOM中)因此您失去了响应。@developerwjk AJAX调用是从另一个页面发出的,称为SERVER.PHP,其中包含无限循环或周期性刷新。因此,当SERVER.PHP周期性刷新时,如何处理请求循环应该是半无限的。也就是说,它一直循环,直到最后返回响应,然后循环停止。所以你不想要
while(1)
而是喜欢
while($responseNotReady)