Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 克服';最大用户连接数';轮询/comet/WebSocket问题_Javascript_Php_Mysql_Ajax_Websocket - Fatal编程技术网

Javascript 克服';最大用户连接数';轮询/comet/WebSocket问题

Javascript 克服';最大用户连接数';轮询/comet/WebSocket问题,javascript,php,mysql,ajax,websocket,Javascript,Php,Mysql,Ajax,Websocket,我有一个php/mysql拍卖网站,它使用while/break循环,使用ajax轮询检查items表中的当前活动项。如果有新的出价或新的地段,它就会中断。服务器脚本是: if ($action == "ping"){ $idle_lot = $_POST['lot']; $idle_bid = $_POST['bid']; $timeout = 15; $now = time(); while((time() - $now) < $timeout)

我有一个php/mysql拍卖网站,它使用while/break循环,使用ajax轮询检查items表中的当前活动项。如果有新的出价或新的地段,它就会中断。服务器脚本是:

if ($action == "ping"){
    $idle_lot = $_POST['lot'];
    $idle_bid = $_POST['bid'];
    $timeout = 15;
    $now = time();
    while((time() - $now) < $timeout) {
        $get_bid_status = $db->prepare("SELECT current_bid, lot_number FROM ".$lots_table." WHERE lot_status='active' LIMIT 1");
        $get_bid_status->execute(array());
        $existCount = $get_bid_status->rowCount();
        if ($existCount > 0 ) {             
            while($row = $get_bid_status->fetch()) {
                $current_bid = $row["current_bid"];
                $lot_number = $row["lot_number"];
            }
            if (($current_bid != $idle_bid)||($idle_lot != $lot_number)) break;             
            sleep(1);               
        } else {
            $return_array[99] = "closed";
        }
        if ($existCount == 0 ) break;
    }
    //other php code here
}
脚本在测试中运行得很好,但当我们进行模拟拍卖时,我们突然崩溃并烧掉了。我们得到了可怕的结果:

SQLSTATE[42000] [1226] User 'XXXX' has exceeded the 'max_user_connections' resource (current value: 20)
我删除了循环,这似乎是问题的主要原因(即每次保持连接打开15秒,并很快用完所有20个连接),然后恢复到简单的轮询

现在,从几十篇文章来看,投票,甚至长时间的投票,可以说都不是“前进的道路”。所以我要重新编码这个网站

我的问题是,使用WebSocket的最新技术(即:pub-nub、node.js、socket.io甚至Comet)能否绕过“max_-server_-connections”这一问题,如果是,请解释如何/为什么

我理解新技术的工作方式有所不同,但如果WS协议不可用,它们似乎都有一种回退方法(通常是轮询),这让我相信,如果我们有1000个并发用户,20多个旧浏览器,例如,我们仍然会遇到相同的“最大服务器连接”问题

PS:未来几年,我们将使用预付费托管服务器,仅仅增加“最大用户连接数”是不可能的。更换主机可能是一种选择,尽管这是一项非常昂贵/耗时的工作


谢谢。

不用在这里进行深入的技术探讨,毫无疑问,PubNub将使您的生活更加轻松,您的服务可扩展且价格合理。最大连接问题可以很容易地避免。您的15秒间隔似乎不是“长轮询”,而是“轮询”。PubNub将使用简单的pub/sub API从您的实现中抽象出实时协议,并允许您只编写业务逻辑。你可以通过一个连接收听数千个“频道”(可能是拍卖)。请联系support@pubnub.comAnd只是想解决您列出的其他选项:node.js、socket.io、Comet。这些都不能解决可伸缩性问题。您仍然需要编写大量PubNub已经为您实现的代码。您需要有人(一些团队)维护保持系统可伸缩性的操作——PubNub为您这样做(运行服务器端操作)。关于你的用例:谢谢你提供的信息,我会好好看看你提供的链接。
SQLSTATE[42000] [1226] User 'XXXX' has exceeded the 'max_user_connections' resource (current value: 20)