根据我得到的答案here,我开始认真看待commons-pool。我最后一次使用它的经验是在2003年左右,可能是1.1或1.2版。许多人认为它的主要用户DBCP是有缺陷的,应避免使用。

是否有人在生产中使用公用池来编写自己的池?最佳的泳池类型是什么?我计划在其中存储客户端 TCP套接字。

是否有另一个通用池替代它?

最佳答案



是的,我愿意,并且该池拥有TCP连接,就像您想要的那样。它是通过Spring连接的,所以假设您了解Spring的配置:

<bean class="com.company.ConnectionSupplier">
<constructor-arg>
  <!-- The ConnectionSupplier wraps an object pool -->
  <bean class="org.apache.commons.pool.impl.GenericObjectPool">
    <constructor-arg>
       <!-- The ObjectPool uses a ConnectionFactory to build new connections -->
       <bean class="com.company.ConnectionFactory">
         <constructor-arg value="server" />
         <constructor-arg value="3000" />
       </bean>
    </constructor-arg>
    <property name="maxActive" value="20" />
    <property name="testOnBorrow" value="true" />
  </bean>
</constructor-arg>
</bean>

ConnectionFactory扩展了BasePoolableObjectFactory,并且是SocketFactory的小型包装。

@第一评论:
ConnectionFactory构造函数需要一个服务器和一个端口。在覆盖的makeObject()中,它创建连接到该服务器和端口的套接字。它返回“连接”对象,该对象使用一些便利的方法包装创建的套接字,以通过套接字进行通信。

使用通过套接字进行通信的协议(protocol)提供的某种“ping”或“echo”测试连接。如果没有可用的连接,除了询问套接字是否已关闭之外,实际上不可能进行连接的验证/测试。在这种情况下,如果池中的连接抛出异常,则该连接将无效,并且应为使用该连接的每种方法准备这种故障,并尝试与另一个连接进行相同的操作。

10-05 21:04
查看更多