Javascript php中使用睡眠线程和刷新页面作为服务器事件源的区别
我已经使用服务器发送的事件构建了一个聊天应用程序。但是sse并不是所有浏览器都支持的。我计划使用长轮询ajax来轮询不支持sse的浏览器的源页面 服务器页面所做的是检查数据库中是否有新消息,并使用echo语句将其输出 通过使用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); } 所以我的问题是:如果我发送了一个等待时
标题(“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)