2011-05-11 104 views
0

我有一個使用長輪詢的基於Zend的應用程序。基本上它會發出一個HTTP POST請求,它會阻止應用程序,直到它返回或在20秒後超時。使用異步長輪詢?

我有需要做第二個請求(這是目前不平行),不幸的是,如果第一個請求掛起,它會在第二個請求執行之前結束20秒(=超時)。

什麼是使我的應用程序異步,或至少做非阻塞HTTP請求I/O的最佳方式是什麼?

回答

1

嗯,也許你應該給你的問題增加一些信息。 如果2個請求不相關(即第二個請求不需要完成第一個請求),則可以執行多個查詢而無需等待第一個請求完成。但是,當然,如果沒有一些Javascript,你就無法做到。

例如,您可以在異步模式下使用jQuery ajax函數(默認情況下它是異步的)。你可以在jQuery中鏈接幾個ajax調用,第二個不會等待第一個完成(但要小心ajax超時設置)。

2

如果您的兩個請求都使用會話(session_start()調用),並且您沒有在長輪詢腳本中關閉會話,則在長輪詢運行期間所有時間使用相同會話的其他腳本鎖定會話。因此,這些腳本必須等待(我認爲它們掛在session_start()上,但不確定)關閉會話,默認情況下這是在腳本結束時自動完成的。因此,如果您不需要長輪詢中的會話,請不要在您的情況下運行20秒的代碼(即在長輪詢中的主迭代之前)啓動它或關閉它(調用session_write_close())之前調用session_write_close()。

希望這會有所幫助。