IMPORTANT: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
current release documentation.
Custom Connection Pool
editCustom Connection Pool
editIf you wish to implement your own custom Connection Pool, your class must implement ConnectionPoolInterface
:
class MyCustomConnectionPool implements ConnectionPoolInterface { /** * @param bool $force * * @return ConnectionInterface */ public function nextConnection($force = false) { // code here } /** * @return void */ public function scheduleCheck() { // code here } }
You can then instantiate an instance of your ConnectionPool and inject it into the ClientBuilder:
$myConnectionPool = new MyCustomConnectionPool(); $client = ClientBuilder::create() ->setConnectionPool($myConnectionPool, []) ->build();
If your connection pool only makes minor changes, you may consider extending AbstractConnectionPool
, which provides
some helper concrete methods. If you choose to go down this route, you need to make sure your ConnectionPool’s implementation
has a compatible constructor (since it is not defined in the interface):
class MyCustomConnectionPool extends AbstractConnectionPool implements ConnectionPoolInterface { public function __construct($connections, SelectorInterface $selector, ConnectionFactory $factory, $connectionPoolParams) { parent::__construct($connections, $selector, $factory, $connectionPoolParams); } /** * @param bool $force * * @return ConnectionInterface */ public function nextConnection($force = false) { // code here } /** * @return void */ public function scheduleCheck() { // code here } }
If your constructor matches AbstractConnectionPool, you may use either object injection or namespace instantiation:
$myConnectionPool = new MyCustomConnectionPool(); $client = ClientBuilder::create() ->setConnectionPool($myConnectionPool, []) // object injection ->setConnectionPool('/MyProject/ConnectionPools/MyCustomConnectionPool', []) // or namespace ->build();