PHP dosyası kaynak kalıcılık

4 Cevap php

Ben MSN protokolüne dayanan basit bir sohbet web uygulama geliştiriyorum. Sunucu fsockopen () döndürülen bir dosya kaynak aracılığıyla MSN sunucusu ile iletişim kurar. İstemci XMLHttpRequest aracılığıyla sunucuya erişir. Sunucu başlangıçta günlükleri ve istemci responseText () XMLHttpRequest nesne yoluyla alınan (bir HTML tablosunda biçimlendirilmiş) kişi listesini yazdırır.

İşte sorun bu. Tüm ilgili sohbet işlevleri (vb, konuşmaları yaratma çevrimiçi / çevrimdışı durumu değişiklikleri takip) çalışması için MSN sunucusu ile iletişim için sorumlu olan dosya kaynak sırayla canlı tutulmalıdır. Ancak XMLHttpRequest tamamlamak için sırayla, PHP komut dosyası yürütülmesine bitirmek gerekir. Hangi sohbet oturumu devam ederken istemci XMLHttpRequest hiçbir yanıt almak anlamına gelir.

Nedir kötü bir dosya kaynak ben sadece $_SESSION [] yer tutucu sohbet oturumu saklamak değil, yani getirilemez olduğunu.

Yani, benim soru, başka bir dosyadan 'transferi' bir dosya kaynak benim için herhangi bir yolu var olduğunu?

4 Cevap

Çoğu dilde olası değildir dosya uygulamalar arasında geçmek için kolları - AFAIK çoğu işletim sistemleri o da izin vermez.

Çözüm daemon olarak çalışan sunucu süreci tutmak için - bu web sunucusu dışında çalıştırmak gerekiyor demektir.

Görmek

http://symcbean.blogspot.com/2010/02/php-ve-long-running-processes.html

ve

http://www.phpclasses.org/browse/package/5758.html

C.

Olası bir çözüm sadece bitmiyor sunucu tarafında bir PHP komut dosyası var olacaktır; Bu yol, fsockopen çağrısına karşılık kaynak silinemez asla ve bağlantı kapalı olmaz.

Bu konuda, size terim "comet" aramak isteyebilirsiniz; temel fikir Gerektiği zaman istemci güncelleştirmeleri gönderir, sunucu tarafında sonsuza kadar çalışan bir komut dosyası sahip olmaktır.

Bunun yerine tarayıcı bir ajax isteği her X saniye göndermek kalmadan, istemci ve sunucu arasında bir bağlantı openened tutmak istiyorum - sadece not maalesef, PHP genellikle bu iş için en iyi araç olduğunu söylemiş, yani ...

StackOverflow: [php] comet

Eğer (kalıcı MySQL bağlantıları örneğin mysql_pconnect() ile yapmak gibi) bunu yapar PHP uzantısı oluşturmak sürece kaynak isteği sonuna yaşayamaz. Ancak, Comet teknolojiyi kullanabilir ve örneğin Bayeux protocol sunucuya konuşmak, diğerleri arasında Dojo araç tarafından desteklenmektedir. Yani, tek başına sunucu veya uzun süre çalışan isteği ya gerektirir ikinci durumda o PHP sağlamak ve web sunucusu zaman sınırları çok uzun çalışan için bu isteği öldürmez olurdu.

Teşekkürler önerileriniz için herkes. Ben kuyrukluyıldız teknolojisini kullanarak kabul, ama karşı karar vermişti, bu projeye başlamadan önce (PHP / Apache iyi uygulamak için görünmüyor). Ben bir araya kesmek çözüm değil, en zarif ama uygulanabilir ile geldim.

Bir PHP komut MSN sunucu iletişimi için sorumlu olduğu, bu sürece kullanıcı aktif olarak çalışacaktır. Bu, bir dosyaya (email_out) veri yazar, hem de bir dosyaya (email_in) verileri okur. İstemci bir AJAX isteği gönderir zaman ayrı bir PHP komut dosyası (email_in) herhangi bir veriyi POST yazacak ve (email_out) herhangi bir veri dönecektir. Nihayet dosyasına erişimi kadar (dosya kaynak için orada mücadele olacak gibi) iki komut veri okuma / yazma olmayacaktır.

Ben, öneri bilmiyorum? Bu şeyler yapmanın en etkili aracı kesin değildir ama gerçekten ben düşünebildiğim tek PHP / apache çözümdür.