2010-09-20 29 views
2

我一直在通過SOAP獲取所有數據的網站上工作。有些頁面可能會有三個或四個呼叫到肥皂服務器,有些呼叫有時可能會很長(30-60秒)。長PHP SOAP進程

我注意到發生的事情是,如果我在30秒的長時間呼叫中停止請求(停止瀏覽器加載)並向不需要很長時間的呼叫發出另一個請求(以較短的時間加載另一個URL呼叫)直到最初通話的30秒鐘結束,我才收到請求(或者看起來如此)。

正是這裏發生的事情是什麼,是有辦法解決它?
這是什麼pcntl可以幫助緩解?
另外我正在尋找通過Nginx設置FPM與FPM。這會影響事情嗎?

感謝所有!

回答

0

我懷疑如果你嗅出交通兩端(例如使用Wireshark),那麼答案可能是更加清晰。

我的猜測是,客戶端或服務器正在試圖做一個DNS查詢,這是非常緩慢的。對於不存在的記錄通常會發生非常慢的DNS查找 - 並且由於請求已在服務器上着陸,這意味着服務器在客戶端IP地址上正在完成DNS查找失敗。

+0

這是否真的有這樣的影響?即使網站在本地運行?或者,你是指運行該站點的服務器(本例中爲localhost)和SOAP服務器之間的DNS?此外,火警錯誤不會將時間報告爲DNS查詢,而只是「等待」開始響應。 – Nick 2010-09-20 12:50:54

+0

是 - 如果肥皂服務器在響應之前想要確定客戶端的IP地址(名稱)。 – symcbean 2010-09-20 16:51:37

0

(我想)我有過類似的問題。我使用SOAP從Java服務器接收PHP端的請求(這是發送請求)。

用於你的問題,你必須發送一個ACK(確認)響應回來?如果是,我認爲你的請求超時。

這是發生在我身上:

在Java方面,預計在30秒一個ACK響應或會出現錯誤,它會重新發送請求。

在PHP端,即使我只要我拿到了SOAP請求中發送的ACK響應,PHP將不會發送它,直到腳本執行結束。這是由於PHP是單線程語言。

我做的事要解決,這是接受SOAP請求時,它解析爲DB和發回ACK響應。然後啓動另一個腳本(守護進程)來處理SOAP請求。解決我的問題是一個竅門。

希望這可能會解決您的問題。

這是用於Salesforce(Java的一方)和它們的PHP工具包(API)

+0

「我做了什麼來解決這個問題就是接受SOAP請求,將它解析爲數據庫併發回ACK響應」 - 你是怎麼做到的?我也有完全一樣的問題。只要我明白,我不能將任何數據保存到數據庫或其他地方,直到處理SOAP請求 – mik 2011-03-23 15:39:53

+0

這些可能會幫助你:http://stackoverflow.com/questions/3133745/php-send-soap-response-早期http://stackoverflow.com/questions/2472746/salesforce-php-bulk-outbound-message-soap-time-out-issue-see-update-2 http:// stackoverflow。COM /問題/ 2462804 /銷售人員-PHP-傳出的消息皁內存漲停問題,domdocumentload – 2011-03-23 16:55:52