"Uzun yoklama" almak için nasıl

1 Cevap php

Ben onların cms 3 esnek ve php olacak sayede bir müşteri için bir proje üzerinde çalışıyorum. Bir kez kullanarak ve ben bir kişi bir değişiklik yaptığında, diğerleri onu göreceksiniz bunu yapmak için çalışıyorum birden fazla müşteri olacak.

Benim Soru: Ben Flex 3 ve PHP kullanıyorum, nasıl 'sunucu-itme "gibi davranan bir şey uygulayabilirsiniz. Uzun yoklama olası / iyi bir seçenek var mı? Ya da orada başka seçenekler olduğunu bana aynı görevi yapmak yardımcı olabilir orada?

Herhangi bir yardım büyük mutluluk duyacağız!

1 Cevap

Uzun yoklama ile sorun (aka AJAX Comet) ve PHP PHP gerçekten mümkün kılan bir parçacığı mimarisi yoksun olduğunu. Diğer geleneksel dillerin çoğu bir istek olsun ve seri bir şekilde hızlı bir şekilde cevap inşa edilmiştir.

Yeni diller tamamen kavramını destekleyen bir noktaya alıyorsanız. Her tam bir işletim sistemi konu adamak zorunda kalmadan binlerce işlemek ve bir kerede açık bağlantı böylece aslında gerçekten bir çerçeve ve web sunucusu epoll kullanır (/ uyumsuz Soket IO tabanlı Etkinlik) ve / veya bağlantıları microthreaded işlenmesini istiyorum sunucu isabet açık bağlantısı. (OS parçacığı sonlu kaynakları var)

AJAX Comet / Uzun yoklama kavramlarını açıklayan bir video yaptım. Burada üzerinde daha fazla görebilirsiniz: http://www.youngtechstars.com/?p=466

Şimdi ... Ben PHP ile uzun yoklama yapmak için yol konseptinin gerçekten hacky kanıtı yarattı. Bu özel nginx mod kullanılması gereklidir. İlk isteği (FastCGI kullanarak) bir PHP sürecinin kapalı isteği sevk edecek bir nginx sunucusuna gelirdi. (": A10x39 X-nginx-BEKLE-KADAR-KEY" falan bu durumda) ben bağlantının açık kalmak istiyorsa ben özel bir HTTP başlığı ile bir yanıt dönecekti. Bu bağlantı üzerinde tutmak için nginx sinyal ve henüz kullanıcıya bir yanıt dönmek olmaz. Veri hazır olduğunda bir noktada sonra ben PHP (veya başka bir işlem) geri nginx için bir yuva açacak ve anahtarı geçmek. Aksi takdirde ikinci bir istek yapmak için nginx neden ve içten aynı isteği ile tekrar PHP sürecini giderdik kullanıcı için cevap alıyorum. Bu kavramı bir kanıt oldu ve sorunsuz çalıştı ama ben hiçbir zaman piyasaya. Eğer açık bağlantısı sunucu izlemek zorunda çünkü kümelenmiş web ortamlarda bu model ile ilgili sorunlar vardır.

Istek zaman uyumsuz olarak ele olduğundan Flex, düz-eski javascript XmlWebRequest yapıyor gibi, uzun yoklama ile herhangi bir sorun değildir.

Orada ancak kutudan bu destekleyen çerçeveler bir dizi:

  • Jetty WebServer - devamından ve açık bağlantı çok destek IO (java.nio) engellenmeyen kullanan saf bir Java web sunucusu.
  • XEP-0206: XMPP Over BOSH - XMPP (Jaber) 'ın HTTP Bağlama / Bosh sistem spec
  • ApacheMQ (Message Queue) - AJAX Comet / HTTP Uzun yoklama sayfası
  • liberator - AJAX Comet için inşa edilmiş bir ticari web sunucusu
  • lightstreamer - AJAX Comet ve HTTP Akış için inşa ticari web sunucusu