eee
This commit is contained in:
@@ -34,3 +34,4 @@ runtime/
|
|||||||
oot
|
oot
|
||||||
d
|
d
|
||||||
composer.lock
|
composer.lock
|
||||||
|
.gstack/
|
||||||
|
|||||||
@@ -106,7 +106,8 @@ class MongoDB
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 代理方法调用到 MongoDB Client
|
* 代理方法调用到 MongoDB Client,内置连接健康检查和回收
|
||||||
|
* 异常时关闭连接并回退计数器,防止断连对象污染连接池
|
||||||
* @param $name
|
* @param $name
|
||||||
* @param $arguments
|
* @param $arguments
|
||||||
* @return mixed
|
* @return mixed
|
||||||
@@ -124,21 +125,53 @@ class MongoDB
|
|||||||
// 如果方法存在于 Database,通过默认数据库调用
|
// 如果方法存在于 Database,通过默认数据库调用
|
||||||
$database = $this->getDatabase();
|
$database = $this->getDatabase();
|
||||||
if (method_exists($database, $name)) {
|
if (method_exists($database, $name)) {
|
||||||
return $database->{$name}(...$arguments);
|
$result = $database->{$name}(...$arguments);
|
||||||
|
$this->returnClient($client);
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new \BadMethodCallException("Method {$name} does not exist on MongoDB Client or Database.");
|
throw new \BadMethodCallException("Method {$name} does not exist on MongoDB Client or Database.");
|
||||||
} catch (\Throwable $throwable) {
|
} catch (\Throwable $throwable) {
|
||||||
\Kiri::getLogger()->json_log($throwable);
|
\Kiri::getLogger()->json_log($throwable);
|
||||||
|
|
||||||
|
$this->closeClient($client);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
} finally {
|
|
||||||
// MongoDB 连接是持久的,不需要释放
|
|
||||||
$this->pool()->push($this->getName(), $client);
|
|
||||||
}
|
}
|
||||||
|
$this->returnClient($client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 归还连接
|
||||||
|
* @param Client $client
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function returnClient(Client $client): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$this->pool()->push($this->getName(), $client);
|
||||||
|
} catch (\Throwable) {
|
||||||
|
$this->closeClient($client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭连接并回退计数器
|
||||||
|
* @param Client $client
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function closeClient(Client $client): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$client->close();
|
||||||
|
} catch (\Throwable) {
|
||||||
|
}
|
||||||
|
$this->pool()->abandon($this->getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行 MongoDB 命令
|
* 执行 MongoDB 命令
|
||||||
* @param array|object $command
|
* @param array|object $command
|
||||||
@@ -382,4 +415,3 @@ class MongoDB
|
|||||||
], $this->options);
|
], $this->options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -136,6 +136,8 @@ class Redis
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 代理 Redis 方法调用,内置健康检查和连接回收
|
||||||
|
* 如果连接 ping 失败则关闭连接并移除,不归还池中防止污染
|
||||||
* @param $name
|
* @param $name
|
||||||
* @param $arguments
|
* @param $arguments
|
||||||
* @return mixed
|
* @return mixed
|
||||||
@@ -151,6 +153,9 @@ class Redis
|
|||||||
} finally {
|
} finally {
|
||||||
if ($client->ping('h') == 'h') {
|
if ($client->ping('h') == 'h') {
|
||||||
$this->pool()->push($this->getName(), $client);
|
$this->pool()->push($this->getName(), $client);
|
||||||
|
} else {
|
||||||
|
$client->close();
|
||||||
|
$this->pool()->abandon($this->getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -67,7 +67,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function connect() {
|
function connect() {
|
||||||
sock = new WebSocket('wss://center-wss.stupideyes.com/ws?access_token=a8exu0la-77ecu-ijhk-inkgt6vln-rlwwuk');
|
sock = new WebSocket('ws://121.40.147.153:6611/sockets/?auth=dG9rZW49NjYxNTBhMWQwYS0wMWItMDMxYS0wZTRjNTJiNGEtMjkzMTI5JnRpbWU9MTc4MjEyODcwMCZyZWZyZXNoPTJzMTdyR1BMWDRuWElKWExycTdNU1pQNEsyUXQwQ1pId1RsWUM5dzZJTmpLU1dvOThocW5KR0tQVFNCU2E2QTllNWRMTm9DYkRBaVhVQVd1cUU3Q1B5ejZLMTVzamdaTlpJWHhXNVlKeWQ2ODBaTkhZdktHUnd5RklKT1NZTEVBMURSb3JrbTUwRVUrTmpNMjJJL0lsMmpPT3p2MzFFNFZ4WkZwb1pXSmZVV015Q1VZenFtYTg4MDRHZ0Z3anZobDlYdWFkakR3QmhmZFd4QloxSC9HWndDRHdVQjN3elFrL01wUWFOSTB2YTlqZjZzQTRESFI2VlJtYWpxYWFHdkVNV3BGOXllbGVrTXFhcUhyT0tkdUpZRXVpSzEzZkNoRUljblFqdUVzWjdGUDBYVGlkNTUybUlyQnlYQjc0YktxQVRNbklvZlFQcnl3aEVUNGRSZVhhdz09');
|
||||||
// sock = new WebSocket('wss://meet-bottle.zhuangb123.com/socket/?auth=dG9rZW49M2I2ODJhNzg0NS0xMTktMzBiMS1mMDkxOGRhNjktNTg2ZDEyJnRpbWU9MTc1MzA4MTI5MyZyZWZyZXNoPXBDT0VFYk9KOG8xTEVZQytyUkR4VlZIaXR1TmVWcndCY2crRTBua2U1ZkJuUWNJaHl6NUtTV0x2ZExXa1Y5aXlyK3NmRnRwOVRCVU91MnhPSVRPRjROTjhoT0hlODNNVmZjN1NXb2QyeDY0TXEvZTFEUCtySjNzNjZhVlplcXdYV0QzV2VRd0V6YkowZ29oOFFqRHVvZGcyb281OEZkZVp5TjVIcHFyejRZQ0VMbkxydXlCUmpFdjNTWnRsQ3gxMWthNDNxbEwzM1lJYVlaV2t3dEhOMm9VaXllNFpKOHFnU1FueEZ4N0c4RDhabzBhajFFeEJIZTlJUFQ0VUo3UkR0V0g2Y3A3bkY3bXlkVHB4Wnp5NG1kRlgxa3M5eC9iVlJHaVFDRnU4VEFsUVdDdHEzbmJ1TnNYZVd3Q2dXWEd1OEUzMld3THVFRzRCZFRCanA2MGtYUT09');
|
// sock = new WebSocket('wss://meet-bottle.zhuangb123.com/socket/?auth=dG9rZW49M2I2ODJhNzg0NS0xMTktMzBiMS1mMDkxOGRhNjktNTg2ZDEyJnRpbWU9MTc1MzA4MTI5MyZyZWZyZXNoPXBDT0VFYk9KOG8xTEVZQytyUkR4VlZIaXR1TmVWcndCY2crRTBua2U1ZkJuUWNJaHl6NUtTV0x2ZExXa1Y5aXlyK3NmRnRwOVRCVU91MnhPSVRPRjROTjhoT0hlODNNVmZjN1NXb2QyeDY0TXEvZTFEUCtySjNzNjZhVlplcXdYV0QzV2VRd0V6YkowZ29oOFFqRHVvZGcyb281OEZkZVp5TjVIcHFyejRZQ0VMbkxydXlCUmpFdjNTWnRsQ3gxMWthNDNxbEwzM1lJYVlaV2t3dEhOMm9VaXllNFpKOHFnU1FueEZ4N0c4RDhabzBhajFFeEJIZTlJUFQ0VUo3UkR0V0g2Y3A3bkY3bXlkVHB4Wnp5NG1kRlgxa3M5eC9iVlJHaVFDRnU4VEFsUVdDdHEzbmJ1TnNYZVd3Q2dXWEd1OEUzMld3THVFRzRCZFRCanA2MGtYUT09');
|
||||||
sock.onopen = function (data) {
|
sock.onopen = function (data) {
|
||||||
if (tick) {
|
if (tick) {
|
||||||
|
|||||||
Reference in New Issue
Block a user