AJAX, PHP oturumlar ve eşzamanlı istekleri [kapalı]

7 Cevap php

Ben noktasına düz alırsınız!

Benim javascript kullanıcı arama gönderdiğinde (harici web API üzerinden) cevap benim PHP dosyası için yaklaşık 20 AJAX istekleri gönderir. Sonuçlar oturum dizide bir dizi içinde saklanır.

Ben tarayıcılar sadece bir sunucuya 2 eşzamanlı istekleri sağlayacak okudum.

Benim ilk sorun hala yanıt bekleyen birden fazla istekler hala varken hala tamamlamak için diğer istekleri için bekliyor beri AJAX "sepete ekle" isteği çalışmaz olmasıdır.

Benim ikinci (ve daha can sıkıcı) sorun aynı anda idare edilmektedir 2 istekler tüm yanıtları tamamlandığında sadece yarım seans dizide böylece üzerinden birbirleriyle yazı gibi görünüyor olmasıdır. Son isteği bile tek veya çift olmasına bağlı olarak tüm tek olanlar veya hatta olanlar ya.

Bu kullanıcıya adil biraz şeyleri yavaşlatmak gibi ben (yani sadece son bittiğinde bir sonraki gönderme) bireysel istekleri göndermek zorunda tercih ediyorum.

Bu oturumda üzerine yazma ya da ben tamamen farklı bir yaklaşım kullanıyor olmalıdır için bir çözüm var mı?

Thanks all!


Edit:
It's for checking domain availability. The user searches for "mydomain" and results for com, net, org, etc are eventually presented.

Tek isteği gönderme ve tek seferde tüm TLD'lere için komut dosyası arama sahip bazı uzantılar kadar ve 30 saniye içinde almak gibi tüm sonuçları sonucunda içeri kadar bir tepki kullanıcının geribildirim alma sırasında hangi döndürdü anlamına gelir girdaptan simgesi için kaydetmek ve (bu javascript etkin değil ne olur) "Lütfen bekleyin".

Ayrı istekler geldikçe bana etki durumunu göstermek için izin

Ben şu anda bir tek isteği gönderme ve daha sonra tüm sonuçları içeri kadar tekrar tekrar oturumu kontrol javascript setInterval kullanarak çizgisinde düşünüyorum

7 Cevap

Ben size çözüm üstlenmeden başlamak gerektiğini düşünüyorum:

  1. Tüm performans kurallar HTTP istekleri sayısını en aza indirmek gerektiğini belirtiyor. 20 çok fazla
  2. Eğer bir kilidini kilitlemek için gereken ortak bir kaynak varsa parça Eğer iki veya daha fazla istekleri aynı anda güncelleme bunu önlemek için manipüle

İstekler bu vb yarış koşulları dahil, (iplikle), eşzamanlı programlama benzer demektir paralel olarak işlenir

Benim önerim sadece sunucuya (kullanıcı yalnızca bir arama değil, 20 gerçekleştirir varsayarak) arama eylemi göndermek olacak, ve bunu gerçekleştirmek istediğiniz 20 eylemler oraya bölünmüş olacaktır. Yani birbirlerinin üzerine yazılmasını önler, sırayla bunları yürütmek için izin verir.

Maalesef bu gerçekten sonra konum ama 20 kişi, tek bir arama için çok fazla gibi geliyor cevap değil. Yani benzer bir şey uygulanabilir olması. oturumda saklanan kısa bir arama geçmişi biz tüm AJAX kullanmak için seçti. Orada bunun için bir zaman ve bir yer ama değil o istekleri trafik artar ile sunucu öldürecek eğer.

Ajax aramalar için bir istek sırasına Bina sahipsiniz. Bir önceki bittikten sonra her çağrı yapılacaktır.

2. istek yapıldıktan sonra size sadece 2 eşzamanlı istekleri göndermek olabilir dedi beri ne olacağını emin olamaz. Bu sayıdan sonra 3 İsteği büyük olasılıkla, vb 2nd yerini alacak

http://php.net/manual/en/function.session-write-close.php

Store the data from your session in local variables, then call this function to unlock your session for other files. (though it has to be said that 20 AJAX calls probably is not the best solution)

Ben bu otomatik tamamlama arama kutusu çeşit olduğunu varsayalım. Eğer Scriptaulous 'Ajax.Autocompleter kullanıyorsanız, sadece bir "minChars" parametresini belirtebilirsiniz. Bu en azından birçok karakter yazdığınız edildiğini kadar AJAX isteği göndermek olmaz

Ayrıca giriş alanı bir AJAX isteği ateşlemeden önce değişiklikleri yokladı nasıl olması gerektiği sıklıkla (saniye olarak) değiştiren 'frekans' parametresini, ayarlamak olabilir.

More details here

Diğerleri işaret olarak ilk yaklaşım isteklerinin sayısını azaltmak olmalıdır. Bu bir seçenek değilse, paralel isteklerinin sayısını artırmak için alt etki alanları kullanabilirsiniz.

Mydomain.com. * Tüm alt etki alanlarını kabul etmek (mydomain.com söylemek için) DNS yapılandırma ve aynı sunucuya gönderebilirsiniz.

Daha sonra farklı alanda farklı AJAX istekleri gönderebilirsiniz (a.mydomain.com, b.mydomain.com, ...)

Bu yaklaşım, tarayıcı tarafından paralel olarak yüklenen maptiles sayısını artırmak için, bu tür hakkında haritalar gibi mapservers tarafından kullanılır.