Bir sohbet uygulaması oluşturmak için (kabaca) 3 seçenek vardır:
sockets
arkaplanı için önyüz ve bir soket yetenekli bir programlama dili için flash / java ve prizler kullanın. Onlar multithreading ve MİT-yetenekli çünkü arkaplanı için, ben, java veya python tavsiye ederim. (ama php gerçekten verimli çoklu yapamaz ve genellikle gerçekten bunun için uygun değildir) PHP ile bunu yapmak mümkün. Eğer yüksek performans gerekiyorsa, bu bir seçenek olduğunu ve muhtemelen aradığınız değil ne.
use ajax and pull
yeni bir şey oldu, bu durumda tüm istemcileri (örneğin hiç 2 saniye) sürekli yoklama vardır. Eğer sadece bu aralıklarda tepkiler olsun çünkü garip hissediyor. ayrıca, bu sunucu ve bant genişliği üzerinde oldukça büyük bir yük koyar. Eğer tarayıcı sürekli yeniler, çünkü bir uygulama bu tekniği kullanır biliyorum. Bu suboptimal çözümdür.
use ajax and push
Bu çok parçalı-yanıtları ile çalışır ve uzun backend (php-) komut dosyalarını çalıştıran oldu. değil en iyi çözüm, ama çekme daha iyi ve çalışır ve birkaç tanınmış sohbet apps kullanılan çoğu zaman. Bu teknik, bazen bir COMET.
benim tavsiye: Eğer üretim kullanımı için bir sohbet uygulaması gerekirse, varolan birini yükleyin. programlama uygulamalar sohbet that kolay değildir.
sadece bunu öğrenmek istiyorsanız, ajax ve itme kullanarak bir program deneyin, sonra basit bir ajax / çekme uygulaması ile başlar.
ve evet, büyük olasılıkla i başarıyla eğlenmek için metin dosyaları ile çalışan çok basit bir ajax / çekme çözüm uygulanan sert bir veritabanı gerekir (ama kesinlikle üretimde kullanmak olmaz!).
o (benim bilgi için, ama ben eminim) (sadece tek başına javascript frontend) ile bir sunucu tarafı arkaplanı olmadan bir sohbet uygulaması oluşturmak mümkün değil!
UPDATE
Eğer iterek verilerin nasıl yapıldığını bilmek istiyorsanız, burada kaynak bakmak: http://wehrlos.strain.at/httpreq/client.html. uyumsuz çok parçalı ne istiyorsun :)
function asSendSyncMulti() {
var httpReq = new XMLHttpRequest();
showMessage( 'Sending Sync Multipart ' + (++this.reqCount) );
// Sync - wait until data arrives
httpReq.multipart = true;
httpReq.open( 'GET', 'server.php?multipart=true&c=' + (this.reqCount), false );
httpReq.onload = showReq;
httpReq.send( null );
}
function showReq( event ) {
if ( event.target.readyState == 4 ) {
showMessage( 'Data arrives: ' + event.target.responseText );
}
else {
alert( 'an error occured: ' + event.target.readyState );
}
}
showReq denir every time veri (Ben burada jquery veya prototip kullanarak değilim, bu yüzden kod biraz obez - bu :) gerçekten eski) sadece bir kez düzenli ajax-istekleri gibi, geldi.
Burada sunucu tarafı kısmı:
<?php
$c = $_GET[ 'c' ];
header('Content-type: multipart/x-mixed-replace;boundary="rn9012"');
sleep( 1 );
print "--rn9012\n";
print "Content-type: application/xml\n\n";
print "\n";
print "Multipart: First Part of Request " . $c . "\n";
print "--rn9012\n";
flush();
sleep( 3 );
print "Content-type: application/xml\n\n";
print "\n";
print "Multipart: Second Part of Request " . $c . "\n";
print "--rn9012--\n";
?>
update2
veritabanı hakkında: Eğer backend mod_php / cgi gibi bir şey-mimari paylaştı var ise, definitley ihtiyaç veritabanları veya TextFiles gibi dış depolama some tür. ama: Kendi http sunucusu yazarak hafızasına güveniyor olabilir (php ile mümkündür, ama ciddi bir çalışma için bunu tavsiye etmem). O gerçekten çok karmaşık değil, ama muhtemelen biraz Sorunuzun kapsamı dışında ^ ^
update3
ben bir hata yaptım! i gerçekten böyle bir şey yaptım uzun zaman oldu, çünkü ortalık karışmış. Burada düzeltmeler şunlardır:
Çok parçalı tepkiler sadece mozilla tarayıcıları ile çalışmak ve bu nedenle sınırlı kullanımı vardır. COMET çok parçalı-tepki anlamına gelmez.
Geleneksel singlepart yanıtı, ancak eldeki veriler kalmayıncaya kadar (sonsuz döngü ve uyku ile) almıştır: COMET demektir. böylece tarayıcı tepki layık hiçbir şey olmuyor bile, (en kötü durumda) her eylem için 1 istek / yanıt değil, bir istek, her x saniye vardır.