Symfony: Bir sonraki sorguları Sıraya ajax arama nedeni sunucu

3 Cevap php

Sunucuda bir ajax arama çok fazla zaman alır zaman benim uygulaması ile ilgili bir sorun var: (Ben çağrı istemci tarafında iptal hala hiçbir etkisi ve kullanıcı var olduğunu fark, sunucu tarafı bitti kadar kullanıcının tüm diğerleri sorguları sıraya ) beklemek zorunda.

İşte benim test durum:

<script type="text/javascript" src="jquery-1.4.1.min.js"></script>

<a href="another-page.php">Go to another page on the same server</a>


<script type="text/javascript">
    url = 'http://localserver/some-very-long-complex-query';
    $.get(url);
</script>

Yani olsun ben linke, diğer sayfaya beni getirmeden önce ilk çağrıyı hizmet sunucu bitirmek üzerine tıkladıktan sonra sonra ateş ve zaman. Benim sorunum bu davranışı önlemek istiyor.

Ben bir lamba sunucu üzerinde ve ben (), o gitmek için yol sizce connection_aborted gibi kullanıcı fonksiyonu ile sorgu iptal sunucu bilgilendirmek için bir yol arıyorum? Ayrıca, bu PHP script uzun bölümü bir MySQL sorgusu olduğunu biliyorum, bu yüzden connection_aborted olduğunu bilmek bile () kullanıcı çağrıyı iptal olduğunu algılayabilir, ben hala '... MySQL sorgusu sırasında bu kontrol etmek gerekir PHP "olay" bu tür işleyebilir gerçekten emin değilim.

Yani herhangi bir fikrin varsa, bunu duymak için sabırsızlanıyorum.

Teşekkür ederim.


Update : After further investigation, I found that the problem happen only with the Symfony framework (that I omitted to precise, my bad). It seems that an Ajax call lock any other future call. It maybe related to the controller or the routing system, I'm looking into it.

Also for those interested by the problem here is my new test case : -new project with Symfony 1.4.3, default configuration, I just created an app and a default module. -jquery 1.4 for the ajax query.

İşte (benim eşsiz modülünde) benim actions.class.php olduğunu:

class defaultActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    //Do nothing
  }

  public function executeNewpage()
  {
    //Do also nothing
  }

  public function executeWaitingaction(){
    // Wait
    sleep(30);
    return false;
  }

}

İşte benim indexSuccess.php şablon dosyasıdır:

<script type="text/javascript" src="jquery-1.4.1.min.js"></script>

<a href="<?php echo url_for('default/newpage');?>">Go to another symfony action</a>


<script type="text/javascript">
    url = '<?php echo url_for('default/waitingaction');?>';
    $.get(url);
</script>

Yeni sayfa şablonu için, çok alakalı değil ... Ama bu, benim gerçek uygulamaya ettik kilidi sorunu çoğaltmak mümkün değilim.

Başkası aynı sorunu yaşıyor?

Teşekkürler.

3 Cevap

Oturum kapatılana kadar PHP oturumu sistem diğer sorgu sıraya: Uygulama bekliyor neden Tamam, nihayet anladım. Yani benim ajax arama oturumu kullanmaya gerek yok ben bir $ do this-> getUser () -> shutdown () benim eylem çok uzun sürüyor önce.

Burada her ayrıntıları: http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.html

Bu sunucuda iptal edilmesi gerekiyor mu, ya da sadece kullanıcı hemen yönlendirilir istiyorsun?

Belki de bir şey gibi AJAXQueue sizin için çalışacak? (Istemci tarafı kodu bariz gerekli değişiklikleri ile ..)

Merhaba ben benzer bir komut ile, aynı sorun var.

JQuery komut

$.ajax({url :'/map/test1',  async:true ,complete: function(){alert("test1")}});
$.ajax({url :'/map/test2',  async:true ,complete: function(){alert("test2")}});

Symfony php

public function executeTest1()
{
 $this->getUser()->shutdown();
 usleep(10000000);
 return $this->renderText("Oki");
}

public function executeTest2()
{
 return $this->renderText("Oki");
}

Sayfa yükleme, test1 requete uç usleep (10000000) bekliyor ama zaman dnm2 test1 yürütme sonunu bekliyor.

Ben Symfony ile bu sorunu Juste var.