我正在爲一個客戶的項目工作,他們的cms將flex 3和php。將會有多個客戶一次使用它,我試圖將它帶到一個人做出改變的地方,其他人會看到它。如何使用flex 3和php獲得「長輪詢」?
我的問題是:如果我正在使用Flex 3和PHP,我該如何實現類似'服務器推送'的行爲。是否長期投票是一個可能的/好的選擇?還有其他的選擇可以幫助我完成同樣的任務嗎?
任何幫助將不勝感激!
我正在爲一個客戶的項目工作,他們的cms將flex 3和php。將會有多個客戶一次使用它,我試圖將它帶到一個人做出改變的地方,其他人會看到它。如何使用flex 3和php獲得「長輪詢」?
我的問題是:如果我正在使用Flex 3和PHP,我該如何實現類似'服務器推送'的行爲。是否長期投票是一個可能的/好的選擇?還有其他的選擇可以幫助我完成同樣的任務嗎?
任何幫助將不勝感激!
長查詢(aka AJAX Comet)和PHP的問題在於PHP缺乏真正使其成爲可能的線程架構。許多其他傳統語言都是爲了獲得請求並以串行方式快速響應而構建的。
較新的語言越來越接近他們可以完全支持這個概念的地步。事實上,您真的需要一個使用EPOLL(基於事件/異步套接字IO)和/或微線程處理連接的框架和Web服務器,以便您可以同時處理數千個和打開的連接,而無需將完整的操作系統線程分配給每個打開你的服務器連接。 (操作系統線程有限的資源)
我做了一個視頻,解釋AJAX Comet/Long輪詢的概念。您可以在這裏看到更多的信息:http://www.youngtechstars.com/?p=466
現在...我確實創建了一個非常簡單的概念驗證方法,用PHP進行長輪詢。它需要使用定製的NGINX mod。首先,請求將進入一個NGINX服務器,該服務器將請求發送到PHP進程(使用FastCGI)。如果我想讓連接保持打開狀態,我會返回一個帶有自定義HTTP頭的響應(在本例中爲「X-NGINX-WAIT-UNTIL-KEY:a10x39」或其他)。這將表明NGINX堅持連接,並且不會將響應返回給用戶。稍後我會在數據準備好並通過密鑰時從PHP(或其他進程)打開一個套接字回到NGINX。這樣做會導致NGINX執行第二次請求,並在內部再次使用相同的請求重新啓動PHP進程,以獲得用戶的響應。這是一個概念的證明,完美無瑕,但我從未發佈過它。在集羣Web環境中,此模型存在問題,因爲您必須跟蹤具有開放連接的服務器。
與在舊式JavaScript中執行XmlWebRequest一樣,Flex對長查詢沒有任何問題,因爲請求是異步處理的。
有很多的框架,可以支持這一點,但是箱子: