2011-08-28 41 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毫秒浪费建立和关闭在单线程模式下的每个连接。 –