This commit is contained in:
2023-08-25 09:37:59 +08:00
parent 6caa482f64
commit 5f7a63a2c0
2 changed files with 10 additions and 9 deletions
+6 -3
View File
@@ -26,6 +26,10 @@ class Pool implements PoolInterface
public function flush($name, $retain_number): void public function flush($name, $retain_number): void
{ {
if ($this->hasChannel($name)) { if ($this->hasChannel($name)) {
if ($retain_number == 0) {
$this->close($name);
return;
}
$this->channel($name)->tailor($retain_number); $this->channel($name)->tailor($retain_number);
} }
} }
@@ -65,7 +69,7 @@ class Pool implements PoolInterface
throw new Exception('Channel is not exists.'); throw new Exception('Channel is not exists.');
} }
$channel = $this->_connections[$name]; $channel = $this->_connections[$name];
if ($channel->isClose()) { if ($channel == null || $channel->isClose()) {
$channel->reconnect(); $channel->reconnect();
} }
return $channel; return $channel;
@@ -189,8 +193,7 @@ class Pool implements PoolInterface
if ($channel === null) { if ($channel === null) {
return; return;
} }
$channel->tailor(0); $this->_connections[$name] = null;
$channel->close();
} }
+4 -6
View File
@@ -32,11 +32,7 @@ class PoolItem
*/ */
public function __construct(readonly public int $maxCreated, readonly public Closure|array $callback) public function __construct(readonly public int $maxCreated, readonly public Closure|array $callback)
{ {
if (Coroutine::getCid() > -1) { $this->reconnect();
$this->_items = new Channel($this->maxCreated);
} else {
$this->_items = new SplQueue($this->maxCreated);
}
} }
@@ -57,8 +53,10 @@ class PoolItem
*/ */
public function reconnect(): void public function reconnect(): void
{ {
if ($this->_items instanceof Channel && $this->_items->errCode == SWOOLE_CHANNEL_CLOSED) { if (Coroutine::getCid() > -1) {
$this->_items = new Channel($this->maxCreated); $this->_items = new Channel($this->maxCreated);
} else {
$this->_items = new SplQueue($this->maxCreated);
} }
} }