Загрузка страниц PHP / Ajax / Тайм-ауты

#php #jquery #ajax

Вопрос:

У меня есть страница с каталогом товаров на аукционе. У каждого есть кнопка для размещения ставок, которая имеет тайм-аут в 2 секунды, чтобы проверить, была ли размещена новая ставка. Существует также другой скрипт, который проверяет, достигнута ли минимальная сумма для этого товара. У этого есть тайм-аут в 3 секунды.

У меня был таймер на странице, отсчитывающий время до закрытия аукциона, который срабатывал каждую секунду, но это привело к блокировке ресурсов браузера, и все запаздывало. В итоге я вызвал этот таймер извне, а javascript выполнял фактический обратный отсчет. Это полностью освободило ресурсы браузера.

Проблема, с которой я сталкиваюсь, заключается в том, что если люди активно участвуют в торгах в последнюю минуту, им необходимо распознать, что идет война ставок, и добавить две минуты к таймеру. У меня есть PHP-код для этого, и он отлично работал, когда таймеры запускались на странице каждую секунду, но теперь ajax вызывает таймер один раз, поэтому две минуты не будут добавлены. Ниже приведен код для одного второго ajax, а во-вторых, то, что у меня есть сейчас.

Вопрос в том, как я могу получить второй вариант обновления страницы php независимо от главной страницы? Я понимаю, что мне, вероятно, нужно, чтобы он работал, как раньше, но это снова загружает браузер.

     
    //ORIGINAL OPTION
    
    $(document).ready(function() {
            
  
      $(function worker(){
        // don't cache ajax or content won't be fresh
        $.ajaxSetup ({
            cache: false,
            complete: function() {
              // Schedule the next request when the current one's complete
              setTimeout(worker, 1000);
            }
        });

        // load() functions
        var loadUrl = "/lot-timer.php?lot_id=<?php echo $rsprod['lot_id']; ?>amp;auction_id=<?php echo $row['auction_id']; ?>amp;eye=<?php echo $i; ?>";

        $("#lot-timer<?php echo $rsprod['lot_id']; ?>").load(loadUrl);

    // end  
    });
  
  });  
  
  
  //SECOND OPTION
      
    $(document).ready(function() {
        
        
        
        $.ajax({
         type: 'POST',
         data:$(this).serialize(),
         dataType: 'html',
         url: "/lot-timer.php?lot_id=<?php echo $rsprod['lot_id']; ?>amp;auction_id=<?php echo $row['auction_id']; ?>amp;eye=<?php echo $i; ?>",
         success: function (d) {//begin success

            //add the pending message to a div on the page
            $("#lot-timer<?php echo $rsprod['lot_id']; ?>").html(d);

         }//end success
        });
        
        
    });  
  
 



 

Комментарии:

1. Это похоже на работу для websockets, а не для AJAX

2. @ADyson знаете ли вы хорошую реализацию websockets в PHP?

3. Честно говоря, PHP не очень хорошо подходит для запуска сервера websocket, потому что он не очень хорош в асинхронности или используется как длительный процесс. Если бы это был я, я бы использовал NodeJS или ASP.NET Ядро для бэкэнда такого сайта, как этот, но я понимаю, что вы, возможно, слишком далеко продвинулись для этого. Наиболее полной реализацией сервера websocket для PHP, о которой я знаю, является Ratchet, но в любом случае вы найдете это в поиске Google через несколько секунд.

4. Спасибо за ответы. Я тоже слишком далеко продвинулся по дороге для Рэтчета. У меня нет времени изучать, как это работает. Есть ли что-нибудь с Javascript / jQuery, что я могу попробовать?

5. Может быть, кто-нибудь подскажет мне, как использовать websockets для вызова таймера и его обновления каждую секунду?