查看此维基http://en.wikipedia.org/wiki/Push_technology
我相信你在想的是长轮询。服务器将其输出设置为分块的位置(有关 php 示例,请参阅如何使 PHP 生成分块响应)
一旦你有一个服务器发送一个分块的响应,你可以使用像这样的东西https://github.com/flowersinthesand/portal持续读取流。
如果您无法更改服务器传输编码,或者您必须坚持使用 ajax,则另一种方法是让您的客户端轮询服务器以进行更改。类似的东西(使用jQuery来缩短这个)
setInterval(function(){
// last_updated lets you compare what's changed since the last call so you can stream updates. Or you could have the server respond with a certain amount of bytes, and then have this param remember where they are in the stream and send the next X bytes
$.get("/my/endpoint?last_updated=" + (new Date().getTime()), function(d){
console.log("Got response");
});
}, 5000); // Refresh every 5 seconds
就个人而言,我在使用Socket.io时很幸运,它基于 node.js,但它会处理如何让每个客户端获得尽可能好的性能。(在内部,它尝试使用 websockets 并退回到 flash 套接字,然后进行轮询,以便您获得新的浏览器的奇特速度,同时仍然支持所有人)