Nasıl xajax ve PHP kullanarak gerçek zamanlı sohbet yazabilirim?

6 Cevap php

Nasıl xajax ve PHP kullanarak gerçek zamanlı sohbet yazabilirim?

In other words, is there a way to send xajax responses from the server to multiple clients? Or is the only possibility to check for new messages every few seconds on client side?

6 Cevap

No Müşteriler repeatadly "anket" sunucusunu gerekir.

Burada anahtar etkileşim tasarımı düşünmek olduğunu düşünüyorum. Hüner sohbet anlık olduğunu düşünerek içine kullanıcı kandırmak için, ama gerçekte her 1 veya 2 veya 3 veya 10 saniye güncelleştirir.

Fikirler:

Kullanıcı bir ileti gönderdiğinde 1), sohbette bunu doğrudan göstermek ve bir anket tetikleyebilir.

Bir anket, diğer kullanıcıların birden mesajlarla geri gelirse 2), hepsini birden eklemek yok aslında rasgele aralıkla, 1-2 saniye kadar bir süre boyunca onları eklemek, onlar geliyorlar gibi bakmak yapma "anında" ve bağımsız olarak. (Mesajların bir demet kullanıcı aynı anda gelip değilse sürekli sohbet var ve sonra güncelleştirilmiş gerçekleştirmek için çok hızlı, ve.)

3) kullanıcı zaman x miktar boşta ise. Kez her 10sn kadar anket hızını bırakın.

Kullanıcı aktif ise 4), yani daha sık mesajlar, anket bir sürü gönderme.

5) Lütfen yazma zaman sohbet son güncellendi, her kanal için statik bir dosya var. Örneğin dosya için chat-teenfun-lastupdate.txt içeriğini 1224934239 veya ne zaman biçimini tercih vardır. Statik bu dosyayı hizmet ve müşterileri kanal güncelleştirilmiş olup olmadığını kontrol etmek için bu dosyayı yoklar izin, yerine o chat-poll.php?ch=teenfun bu dinamik denetimi yapar çağırıyor. Statik dosyaları dinamik komut dosyası için ilgili çalışmalarına bağlı, hızlı etrafında 10-100 kez görev yaptı, ve sen 250 + kullanıcı yoklama almak ne zaman ihtiyacınız olacak edilir.

İyi şanslar ve eğlenin!

/ 0

PS. Alternatively you could actually let clients do an ajax call to the server and keep them 'hanging'. Bu onların isteğini kabul ve geri veri göndermeye başlamak için taklit olduğunu, ama sonra sadece duraklatmak. Şey happends zaman incelikleri verilerle yanıt bitirmek. Bu çalışması için ben size 250 php süreçler bellekte etrafında asılı olmadığı gibi, özellikle bunu yapar, ama kendi HTTP sunucusu yazmanız gerekir inanıyorum. Belki Lighttpd bu LUA önbellek mod ile bir şekilde bu şekilde kullanılıyor olabilir. Bilmiyorum. Olsa ilginç olurdu. Hell Ben bazen bunu denemek lazım :)

Elbette var, ama birçok kullanıcı ile çok verimli olacak sanmıyorum. {[Çıkış (- Orada herhangi bir yeni mesaj, ya da comet technique sunucu müşterilerine yeni mesajlar zorlayabilir hangi kullanabilirsiniz eğer her istemci anketler sunucu görmek için yoklama yapabilir ya 1)]}. Bu kullanılarak uygulanabilir nasıl xajax ve PHP beni aşıyor, ama burada bunu uygulamak için denemek istiyorum nasıl.

Her istemci sonra, (vs giriş) sunucuya bağlanmak edelim:

  1. Bir istemci tarafından gönderilen her mesaj için (gönderici) istemci için bir mesaj kuyruğu güncellemek (alıcı)
  2. Kuyrukluyıldızın aracılığıyla yeni mesajları itin / kuyrukta yeni iletiler için müşteri anket sunucusu olsun.
  3. Yeni mesajlar varsa GUI güncelleyin.
  4. Durulama, ter, tekrar

Ejabberd gibi gerçek bir sohbet sunucusunu kullanarak, uzun bir yol daha verimli olması ve kullanıcıların masaüstü istemcileri yoluyla bağlanmasına izin verebilir (Eğer istediğiniz buysa). Ben muhtemelen bir arka uç olarak, IOW ejabberd sunucu olacağını kullanmak istiyorum ve PHP WebGUI için bir vekil olarak XMPP in PHP kullanarak istemci ve hareket olacaktır.

See also:
Google Techtalk on Gmail's chat feature (and scalability issues)

Bu benim 0,02 $ var

Sürece HTTP push teknolojisi orada olmadığı gibi sadece JavaScript kullanarak gerçek zamanlı sohbet asla.

Olası workarrounds:

  • Bazı soket iletişimi gerçekleştirmek için Flash Film veya bir Java Applet kullanın
  • Birkaç saniye geri sunucu tarafında yoklama isteklerini tutun

Sen WebSockets kullanabilirsiniz, ancak bu tür sınırlı olan yeni bir HTML5 özelliği olan olabilir. Sizin için şanslı idare tarayıcılarda WebSockets uygulayan, socksjs var.

Herhangi WebSockets sunucu kullanmak gerekir hosting tarafında, PHP için bir kaç var.

Böyle PHP / JSP, HTTP bağlantı, seçenekler listesinden işaretlemiştir gerekecektir asılı tekniği gibi bir betik dili ile yazılmış bir sohbet sunucusu uygulamak için arıyoruz. Nedeni, web sunucularının (özel paylaşılan ana) en asılı çok sayıda bağlantı sevmiyorum.

Eğer bu "Optimized Chat Server Protocol for Server Side Scripting Languages" yayında bir web istemcisi ve PHP sohbet sunucusu uygulamak için ihtiyacınız olan her şeyi bulabilirsiniz.

Gördüğüm en iyi strateji mesajlar için bir AJAX isteği yapmak ve daha sonra kısa sürede bitirir gibi o aynı isteği yeniden başlatmak.

Sunucu tarafında, 60 saniye boyunca veya yeni bir mesaj alınıncaya kadar script "durak" yapmak. Bu 60 saniyelik bir maksimum açık aynı bağlantı tutar, ama yeni bir mesaj alındığında, onu verir ve başka bir bağlantı açmak için istemci tarafı AJAX isteyen, hemen durur.

Bu yeni mesajların neredeyse anında bildirim sağlar ve aynı zamanda yeni bir bağlantı her x saniyede yapım daha sunucu üzerinde çok daha kolaydır.