2012-06-12 93 views
3

由于REST是无状态的,每个进来的请求都不知道前一个请求是否进来。在这种情况下连接池是否可能?是否可以使用REST连接池?

如果要实现连接池,它将打开连接池并在每次请求时关闭它,就像标准数据库连接一样。

REST如何实现以充分利用连接池?

回答

4

您需要了解什么是连接池(对象池),缓存和差异。

创建连接池是为了避免创建这些昂贵资源的开销。他们大多创建并存储在某个地方,在使用后,他们会返回到池中并可以再次使用。这是你避免了反复创建这些资源的代价。如数据库连接。

对于REST,您如何向REST服务发出请求?可以通过PUT,GET,POST等通过HTTP进行说,因此您需要HTTP连接。如果您担心服务器,取决于您使用的服务器,它们中的大多数使用线程。

我有一种感觉,你可能会混淆缓存和对象池。与对象池一样,就像线程池一样,您可以创建该对象的X数量并将其存储在池中(通常是队列)。无论何时你需要一个,你都可以在泳池里问一个。完成之后,将其返回到游泳池。

连接池上下文中的REST意义重大。

你可能想要的是缓存... REST是无状态的,但每个对象都有一个唯一的标识符,所以你可以基于该ID来缓存它。

+0

你说得对,我实现了Memcached,并保持数据库连接到最低限度。感谢让我的力量成为可能。 – Atma

1

它当然是可能的:REST并没有规定任何关于你的服务器是如何在内部构建的,而是为了忽略状态和拥有统一的HTTP接口。因此,您可以拥有一个使用连接池连接到数据库的服务器进程,但仍然完全符合整个REST,无状态,嵌入式组件设计风格。

0

REST实现中的无状态需要处理请求所需的任何状态都需要包含在其中。它不会阻止服务器为了效率而维持状态。

连接池没问题,服务器上的身份验证缓存也是如此。不好的是一个SQL类型的连接池,其中有一个请求流,如:{login/operation1/operation2},其中,如果没有首先在同一个连接上执行登录操作,则无法对operation1进行服务。 REST实现需要{login + operation1/login + operation2}之类的东西,因为它可以在{login + operation1} {drop cnx} {login + operation2}中安全地拆分,因此不需要服务器维护状态。