使用PHP和jQuery的简单Comet示例

33

有人可以用PHP给我一个好的、简单的彗星技术例子吗?

我只需要一个使用持久HTTP连接或类似方法的例子。我不想使用轮询技术,因为我已经设置了这样的技术,它不仅难以处理和管理,而且对资源的消耗也很大。另外我正在使用IIS7而不是Apache。

一个好的例子将非常有帮助,这样我就可以从这个丑陋的轮询技术中走出来了。


getclicky.com似乎非常成功地使用了轮询方法。 - Alec Smart
7个回答

15

你应该使用轮询或使用专门为长连接和COMET设计的Web服务器,配合一个良好的JS后端:

function listen() {
    $.get("/mylongrequestfile", {}, function(data) {
        $("#mydiv").html(data);
        listen(); // then launch again
    }));
};

请记住,COMET 是“等待数据,如果有数据则返回并退出”的方式,因此 JS 后端将需要解析数据并重新发起向服务器请求的过程。

在这个例子中,如果出现服务器端问题或者用户端断开连接,整个过程都会中断(只有在请求成功时才调用该函数)。


2
+1 很棒的代码,你会推荐在请求之间加入延迟吗? - Doug Molineux
1
服务器本身应该制造“睡眠”效果,因此在发出响应之前,服务器应该等待直到以下情况之一发生(1- 发现新数据,2- 请求超时)。 - MhdSyrwan

6

看看这个:如何使用PHP实现COMET
这不是使用JQuery,而是使用PHP和Prototype制作的。非常易懂。我认为在查看此内容后,您可以很容易地制作出JQuery脚本。


3

2
从未使用过这种技术并研究了关于“长轮询”的维基百科文章后,它似乎是唯一可行的解决方案。它听起来很简单,通过在服务器上无限循环和睡眠脚本来实现。从维基百科文章链接的HTTP流页面中有一些实际代码
您尝试过这些方法并遇到特定问题吗?

2

1
你可以看一下这个文章,它是理解Comet编程概念的很好的起点。
在这篇文章中,你会找到两个例子。第一个例子使用iframe技术,而第二个例子则使用持久连接。

0
对于IIS,有WebSync。然而,由于您正在使用PHP,您可能更适合使用WebSync On-Demand。任何一个都可以为您提供所需的服务器推送,并且易于使用。还要查看this question,这基本上就是您想要的。
这里是WebSync On-Demand的一个简单示例,不需要任何脚本语言即可运行。只需在两个窗口中打开,即可看到发布/订阅的效果。
要从服务器发布,可以使用PHP api

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接