Ajax İle Sürekli İletişim
-
Facebook'u biliyoruz (hocam.com ve bir çok sitede de mevcut) sürekli host ile bağlantı halinde. Yeni bir mail geldiğinde falan direkt mesaj geliyor.
FAcebook, javascript ve ajax'ın biraz bokunu çıkarttığından anlamakta zorlandığım kısım var ( iPhone notifications ta aynı şekilde ).
--
Şimdi ; bir check.php sayfası koysam. Bu sayfada gelen mail, mesaj, yenilikleri falan kontrol etse, varsa ona göre işlem yaptırsa , javascript timer ile her 30 saniyede bir ajax olayına girişsem nasıl olur ? Bu aklıma gelen en basit çözümü.
-
Fakat ; facebookta, bir işlem olduğunda geliyor. Yani mesaj geldiğinde hemen uyarıyor. 30 saniye beklediğini sanmıyorum. Yada her 5-10 saniyede bi check ediyor. Bunun çözersem, mesaj sisteminide hallederim. Yani her 3-4 saniyede bir check.php'ye ajaxla dadanmak var. Fakat daha bir sorgu bitmeden, yenisi başlar. Hadi bunuda sorgu bittikten sonra 3 saniye desek..
-------
durum kısaca bu mu ? nedir, ne değildir ? Başka mantığı var mı ?
-
Facebook bildiğim kadarıyla arka planda c++ kullanıyor muhtemelen event tabanlı programlama yapmışlardır onun için
Şurda bi örnek var mesela event tabanlı değilde compile edilmiş programın php içinde çağrılması
-
hocam döngüye her 5-10 saniye de check etmesi hem client ı hem serverı yorar.
Ajax ile uzun süreli bağlantı açıp tüm işlemleri ordan gerçekleştiriyorsun.
aradığın yöntemin adı
Reserve Ajax yada Server Push yada Comet diye geçiyor.
3 de aynı şey aslında.
şöyle de bi konum vardı. Asp.net le ilgili gerçi ama bi fikir verebilir.
http://www.tahribat.com/Forum-Asp-Net-Reverse-Ajax-Server-Push-Comet-144310/
-
ben aciz bilgimle şöyle yapardım check sistemini yapıp javascript ile setTimeOut ile (kontrolet(),2000) deyip her sn de bir tekrar kontrol etmesini isterdim ne kadar yvaştlatır bilemem tabi
-
şöyle bir şey yapılabilir. sayfada frame ile php çağırılıp o php içinde mesela 1 den 10000 kadar döngüye sokup her döngüden sonra flush ve ob_flush çekip anlık çıktı alınabilir o anlık çıktıda javascript olur parent.bilmemne diye güncelleme anlık yapılabilir. en son döngü bitincede sayfa kendini refreshler döngü tekrardan başlar.
-
http://www.makeuseof.com/tag/facebook-work-nuts-bolts-technology-explained/
Şöyle bişey buldum facebook'un kullandığı teknolojiler diye aratınca diğer yöntemler muhtemelen çok yorar sistemi o yüzden event'lar olmadan o kadar hızlı çalışabilmesi çok zor gibi duruyor.
Şurdada kullandıkları programları vs açıklamışlar developerlar için :
-
asiminnesli bunu yazdı:
-----------------------------ben aciz bilgimle şöyle yapardım check sistemini yapıp javascript ile setTimeOut ile (kontrolet(),2000) deyip her sn de bir tekrar kontrol etmesini isterdim ne kadar yvaştlatır bilemem tabi
-----------------------------benimde aklıma o geldi de, problem olacak sanırım. Mesela bağlantı gitti geldi birşeyler oldu ne hale gelir acaba.
İçimden bi ses bu iş için baya bi javascript ve php kodlayacağım (kontroller) diyor.
@ KodlayanAdam : teşekkürler Sharpshooter'a da mesaj attım. En azından yöntem adı vs.. öğrensme oda yeter. Hiç bir fikrim yok çünkü.
-
şurda var sanırım. Şurayı bi mıncıklayayım.
-
En basiti long polling 'dir. Bir ara comet için php ape project vardı. Şimdi onlar da javascripte dönmüşler. Phpde bilmiyorum ama dil farketmez mantığı alırım dersen javascript v8 engine kullanan nodejs ve python tornadowebi inceleyebilirsin. Özellikle tornadoweb'in chat demosunu incelersen çok faydalı olacaktır. ape-project = http://www.ape-project.org/
-
doganaydin bunu yazdı:
-----------------------------En basiti long polling 'dir. Bir ara comet için php ape project vardı. Şimdi onlar da javascripte dönmüşler. Phpde bilmiyorum ama dil farketmez mantığı alırım dersen javascript v8 engine kullanan nodejs ve python tornadowebi inceleyebilirsin. Özellikle tornadoweb'in chat demosunu incelersen çok faydalı olacaktır. ape-project = http://www.ape-project.org/
-----------------------------nodejs projesini biliyorum. Sanırım en kolayı ona geçmek.
Fakat şu sıralar ciddi ciddi, django'ya geçmeyi düşünüyorum. Bu tür işler çok daha kolay. Bir gözümde php6 da.
Zaman kaybetmemek isterken, 3-4 gün php 'nin buglarıyla uğraştım. Şimdide bu tarz şeyler var. Sıyırıcam artık.
-
Django yu tornado serverda çalıştırabilirsiniz. Hatta hiç uğraşmadan proje php bile olsa real-time olacak kısmın back-end'ini python-tornado ile yazıp ajax ile php sayfalarda gösterebilirsiniz. Ayrıca pek tavsiye etmediğim websocketler de var. Ancak uyumsuz browserlardan dolayı çoğu kişi real-time bilgileri göremeyebilir. İkisini birden de kullanılabilir. Nodejs için socket.io veya python için tornado içinde websocket desteği kullanılabilir.
