【问题标题】:What technology to use for a realtime bidding system? [closed]实时竞价系统使用什么技术? [关闭]
【发布时间】:2011-07-09 11:45:56
【问题描述】:

http://www.bidzinga.com/

http://www.bidbass.com/

他们是否使用 COMET 技术?

您建议使用什么,并且可能是关于如何使用建议的技术实现它的简单描述?

【问题讨论】:

    标签: php ajax comet


    【解决方案1】:

    嗨,这些是什么 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,但您应该具备编译软件的能力。

    【讨论】:

    • 您可能想要提及 WebSockets,因为您提出的许多解决方案(推送器、socket.io)都支持它。
    • 是的,但是如果他们只支持 websockets 你会有一个大问题,因为并不是所有的浏览器都支持 websockets。他们提供了更多的传输来支持跨浏览器..
    • 嗨,Alfred,当然 PHP 不是为处理此类问题而设计的,但是让 php 作为这些框架的客户端会很棒。
    • @Geocine,最快的上手方式是使用 pusher。他们有很好的休息 API。还有一个为 PHP => github.com/squeeks/Pusher-PHP 开发的库。也许当我有时间时,我想在 socket.io 周围包装一个简单的休息 API ;)。但我想这仍然需要一些时间。我的猜测是我可以在一个月内得到一些很酷的东西。如果我在几天、一周内快速工作......
    • @Alfred,您使用 Pusher 的建议很棒,但我更喜欢自托管解决方案而不是开源解决方案。我没有钱推出这样的。那么socket.io是否可以用于PHP是客户端或js的PHP,这就是我到目前为止所链接的帖子还没有深入挖掘的内容。你推荐 socket.io、node.js、redis 和 PHP 组合吗?它不需要学习太多。谢谢!
    【解决方案2】:

    setInterval杀死您的服务器/客户端,每次更新一次。

    为此,您可以使用递归函数

        //call foo onload
        foo();
    
        function foo(){
    
        // ajax call
    
        $.get('server.php', function(data) {
    
        var recursivecall= setTimeout(function(){
    
        foo(); // recalling
    
        },1000);
    
        });
    }
    

    如有必要,您可以随时使用clearTimeout(recursivecall); 中止递归调用。

    【讨论】:

      【解决方案3】:

      他们每秒轮询服务器以检查/重新渲染时间并获取新数据。 这是带有 setInterval 的经典 ajax

      setInterval(function(){ get_new_data(); }, 1000);
      

      【讨论】:

      • 确定他们每秒轮询一次?会杀死服务器/客户端吗?我知道系统每 3-10 秒拉一次,当服务器没有任何请求时,客户端会为那些“超时”生成虚假数据。
      【解决方案4】:

      您可以为此使用 node.jssocket.iohttp://yoramkornatzky.com/2013/07/20/real-time-auctions-with-node-js/comment-page-1/#comment-55这个链接可以带你一个好的开始。如果您是 node 和 socket.io 的新手,请告诉我。

      【讨论】:

        【解决方案5】:

        我是 pennyauctionsoftware.net 的开发人员,我们有一个产品使用 websockets 测试了 12000 个并发用户,并为旧版浏览器提供了 ajax 回退...它使用 memcache、redis 和浏览器缓存大量利用缓存

        【讨论】:

          猜你喜欢
          • 2014-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多