【发布时间】:2011-07-09 11:45:56
【问题描述】:
【问题讨论】:
【问题讨论】:
嗨,这些是什么 ajax 技术 网站使用?
我快速检查了 Bidzinga 的源代码,看起来他们只是在做简单的轮询(频繁!)。例如,在这个 javascript 文件(http://www.bidzinga.com/js/default.js) 中,我展示了经常轮询的部分:
setInterval(function(){
var gettime = '/gettime.php?' + new Date().getTime();
$.ajax({
url: gettime,
success: function(data){
bidOfficialTime.html(data);
}
});
}, 1000);
如果你问我,这是一个非常糟糕的方法,并且会在负载下杀死你的服务器。如果您可以看到使用 PHP(/gettime.php) 的服务器没有 APC(您至少需要安装/编译它以获得良好的性能) 那么您可以打赌服务器应付不过来,因为每次 PHP 都需要编译字节码。当不使用 APC 或任何内存数据库(Redis、Memcached)时,它还需要从磁盘(有时缓存)获取每个请求。即使频繁轮询从来都不是一个聪明的方法,而且您可以确定您的服务器会在负载下死机。
他们是否使用 COMET 技术?
Bidzinga 没有使用 COMET,因为它使用普通轮询。
您建议使用什么,以及 可能是关于如何的简单描述 使用建议的实现它 技术?
我想这取决于你的规模(大小)。
但我认为一开始我会建议您使用pusher,因为它是一个托管解决方案,有很好的文档记录,甚至还有免费计划。
我们的免费沙盒计划包括多达 20 个连接和 100,000 条消息 每天
我必须提醒您,免费/廉价计划没有 SSL,因此您绝不应该通过网络发送任何私人信息。更大的价格计划确实有 SSL,但每月收费 50 美元。我认为如果你自己实现这个你可以更便宜,但是这又会花费你时间(时间等于金钱)。以下是一些可能适合您的其他托管解决方案:
首先我想提一下,这些都不是 PHP,因为我不认为 PHP 是为处理这个问题而设计的。即使是完全是 PHP 商店的 Facebook(现在经常使用 HipHop)也同意我的观点并实现了 chat using erlang。对于这些记录良好的开源产品,您将需要 VPS。对于其中一些人来说,如果您可以以 root 身份安装软件,那真是太好了。虽然并非所有这些产品都需要 VPS,但您应该具备编译软件的能力。
【讨论】:
setInterval 将杀死您的服务器/客户端,每次更新一次。
为此,您可以使用递归函数
//call foo onload
foo();
function foo(){
// ajax call
$.get('server.php', function(data) {
var recursivecall= setTimeout(function(){
foo(); // recalling
},1000);
});
}
如有必要,您可以随时使用clearTimeout(recursivecall); 中止递归调用。
【讨论】:
他们每秒轮询服务器以检查/重新渲染时间并获取新数据。 这是带有 setInterval 的经典 ajax
setInterval(function(){ get_new_data(); }, 1000);
【讨论】:
您可以为此使用 node.js 和 socket.io。 http://yoramkornatzky.com/2013/07/20/real-time-auctions-with-node-js/comment-page-1/#comment-55这个链接可以带你一个好的开始。如果您是 node 和 socket.io 的新手,请告诉我。
【讨论】:
我是 pennyauctionsoftware.net 的开发人员,我们有一个产品使用 websockets 测试了 12000 个并发用户,并为旧版浏览器提供了 ajax 回退...它使用 memcache、redis 和浏览器缓存大量利用缓存
【讨论】: