2011-08-28 69 views
0

我必須實現一個Python Web應用程序,該應用程序通過Web服務(具有GET請求和JSON響應的API)提供數據。使用AJP執行從Python到Java Web服務器的請求

API服務器是用Java實現的。初步測試顯示,如果通過urllib2(通過打開和關閉每個請求的連接)進行API調用,開銷會很大。

如果我在API服務器中啓用AJP,我應該使用哪個庫來使用Python中的AJP協議執行請求?我googled Plup,但我找不到一個明確的方式來請求和使用Python中的數據,而不是在其他地方代理它。

正在使用AJP一個很好的解決方案?很顯然,我必須維護一個連接池來執行AJP請求,但我在Plup中找不到任何相關內容。

謝謝。

回答

1

我不知道AJP是什麼。你也沒有打開什麼去「sigfinicant開銷」,所以我可能是一個窮人回答這個問題。

但是,如果我是你,我會先嚐試一些技巧:

啓用HTTP 1.1的保活上的urllib2

(這裏是使用第三方庫Python urllib2 with keep alive爲例)

HTTP 1.1保持連接不會爲後續請求關閉TCP/IP管道。

使用生成/ eventlets web服務器,它爲urllib/Python套接字提供非阻塞IO補丁

http://pypi.python.org/pypi/Spawning/

這將使並行在Python更強大,當應用程序中的開銷是輸入/輸出,不使用CPU來處理請求。 JSON解碼很少受CPU限制。

有了這兩個技巧,我們可以在Microsoft IIS支持的API服務器(服務器場)的Python Web應用程序中使用1000次請求/秒。

+0

謝謝你的回答。我會嘗試啓用保持活動。我發現這個庫完全符合我的需求。 http://code.google.com/p/urllib3/ –

+2

AJP是由大多數Java Web服務器實現的協議,用於啓用來自諸如apache或lighthttpd之類的前端服務器的請求代理。 –

+0

在開銷之下,我的意思是從位於網絡附近的HTTP服務器訪問資源所需的時間與從網絡中相同位置獲取相同資源所需的時間之間的差異,並測量訪問時間和持久連接(例如Mongo's db)。在我的設置高達50毫秒浪費建立和關閉在單線程模式下的每個連接。 –