1. 0
    Soru soruldu Programlama PHP 1 ay önce

    Codeigniter Ajax Long Polling Kilitlenme

    d4mncoder
    Ünvan yok

Anlık olarak yeni mesaj var mı diye veritabanını long pollingle kontrol ediyorum. Çalışıyor fakat ilk ajax gittikten sonra tüm site donuyor. Yeni sekmede açsam bile site açılmıyor. Neden kaynaklanıyor olabilir?

js bu şekilde

(function mesajlariAl(url){
  $.ajax({ url: url, success: function(data){
    //Yazdır
    $('#mesaj_liste').append(data.mesajlar);
  }, dataType: "json", complete: mesajlariAl, timeout: 30000 });
})();

Codeigniter'da controller bu şekilde

set_time_limit(0);

while(true){
$mesajVarMi = $this->mesaj_model->yeniVarMi($kullanici_id);
    if($mesajVarMi){
        $data['durum'] = 1;
        $data['mesajlar'] = $this->mesaj_model->yeniMesajlariGetir($kullanici_id);
        
        echo json_encode($data);
        
        break;
    }else{
        sleep( 1 );
        continue;
    }    
}
1 yanıt
  1. 1
    Emre Özdemir
    Ünvan yok · 29 gün önce

    PHP script çalıştırılırken session dosyalarını kilitliyor. Long Polling yaptığınız sırada dosyanın işlenme süresi uzun olduğundan session dosyaları kilitli kalıyor ve diğer istekler sırasını bekliyor mecburen.

    Çözümü ise çok basit set_time_limit()'ten sonra şunu eklerseniz düzelecektir.

    session_write_close();