PHP:长轮询&彗星相关
PHP: Longpolling & Comet related
最近,我要为我的网站制作一个即时通知系统。我听说COMET在这种情况下是必不可少的。
我一直在搜索关于PHP&彗星已经有一段时间了,然而,指南&我发现的文章似乎只是循环中的ajax请求。例如,有一个基本的javascript代码,它每隔2秒从PHP文件中获取值并输出到HTML。据我所知,应该是COMET向HTML推送新值,因此,循环应该在服务器端,而不是客户端。在我的母语中,有一半的文章使用setInterval(),每X秒联系一次PHP文件。
所以,我有一些问题要问你。
- 是否有任何指南或示例,不使用任何易于理解的外部框架,如XAJAX/NOLOH
- 在服务器端使用COMET和每X秒从ajax.php请求一次值之间的性能差异是什么
- 我上面提到的定时请求可以称为COMET?(例如,使用jQuery和PHP进行长轮询)
- 运行COMET服务器端需要任何扩展吗?(我的网络主机使用Apache,我个人使用Nginx)
您必须使用客户端脚本(AJAX),因为必须轮询服务器。在没有打开连接的情况下,服务器不能简单地将消息发送到某人的浏览器。我对HTML5网络套接字不太熟悉,但我相信这可以让你与服务器保持持久的连接,然而HTML5浏览器并没有被广泛使用,无法将其作为"公共"网站上的解决方案。
轮询的工作时间是,异步请求从浏览器发送,超时时间很长(例如30秒),当请求到达服务器时,它会去检查新消息,但当现在有消息要显示时,它不会直接输出结果,而是进入无限循环,例如每秒轮询数据库(使用sleep
来推迟查询),直到找到消息为止。当找到消息时,它终止循环并输出结果。如果30秒后没有消息,脚本将超时并发回一个空请求。
因此,请求可以在0到30秒之间发送回来。一旦请求到达浏览器,就会对其进行处理,并发送一个新的30秒请求。
至于你的问题;
- 您需要一个客户端框架来进行轮询
- 不能仅在服务器端使用Comet。与正常轮询相比,使用长轮询(例如每秒轮询一次)非常重要,因为您发出的服务器请求要少得多
- 据我所知;是
- 您可以使用任何服务器端语言,只要它可以在查询消息时保持连接打开即可
还可以看看http://nodejs.org/
我不知道COMMET到底是什么意思。但为了这个目的,你有很多解决方案。正如您提到的,一个是ajax的长轮询。很简单。而不是仅重新请求新浏览器(HtML5)。
还有一个选项是"服务器发送事件"。它需要HTML5浏览器,但它可以在不轮询的情况下保持连接:
客户端:
if (window.EventSource) {
window.onload = function() {
window.scrollTo(0,1);
setTimeout(
function() {
var source = new EventSource("events.php");
source.onmessage = function (event) {
document.body.innerHTML += event.data + "<br>";
};
}, 1000);
};
} else {
document.write("Please visit this page in a browser that supports EventSource to see the test");
}
服务器:
if ($_SERVER['HTTP_ACCEPT'] === 'text/event-stream') {
header('Content-Type: text/event-stream');
echo "data: This is the first event'n'n";
flush();
$i = 5;
while (--$i) {
sleep(1);
$time = date('r');
echo "data: The server time is: {$time}'n'n";
flush();
}
} else {
echo 'This demo is for use with an EventSource compatible browser.';
}
祝你好运。
- php&js-将电子邮件添加到输入文本中
- PHP&CSS:如何获得表中每一行的悬停效果
- 无法使用AJAX&PHP
- 如何安全地获取&使用Facebook应用程序访问令牌发送通知使用PHP&Javascript
- 如何将Angular 2用于各种网站&使用PHP作为后端的模块
- 如果没有添加PHP&Javascript
- 将本地MySQL数据库与PHP&谷歌地图上的JavaScript
- IE不发送发布数据PHP&jQuery
- css&js文件在php中不起作用
- PHP&jQuery联系人表单错误
- 如何不允许在使用PHP的自动完成表单中不在数据库中的值&JS
- Jquery、AJAX&PHP,表单提交不起作用
- 启动&使用php停止iframe
- (PHP&JavaScript)a href添加按钮赢得'我不适用于Mozilla,但适用于IE和谷歌
- 动态路由PHP&AngularJS
- 是php json_encode&AJAX破坏了我的数组
- php&ajax检索post数据失败
- 无限滚动(mysql,php&js)循环问题
- 如何将DIV ID的值保存到数据库PHP&MySQL
- & php post receive problem