Кто-нибудь использует пул общих ресурсов в
производство написать свой собственный пул?
Да, я делаю, и пул содержит 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 () он создает сокеты, которые подключаются к этому серверу и порту. Он возвращает объекты «Соединение», которые обертывают созданный сокет некоторыми удобными методами для связи через сокет.
Соединение проверяется с использованием типа «ping» или «echo», предоставляемого протоколом, используемым для связи через сокет. Если это не было доступно, проверка / проверка соединения на самом деле невозможна, за исключением запроса сокета, было ли оно закрыто. В этом случае Соединение в пуле было бы недействительным, если бы оно вызвало исключение, и каждый метод, использующий Соединения, должен быть подготовлен к такому сбою и попытаться выполнить ту же операцию с другим соединением.