公司现有推广站100+(持续增加中),每个站后台都有文章功能,每次发文章会打包几千个txt上传然后解压读每个txt把内容存进数据库。
现在运营觉得每个站都要登上去操作不方便,想有一个总后台能对每个站发文章。
我想的是做成定时任务,先把推广站的数据库信息都存起来,在发布平台选站点并传文章,循环拿到站点数据库信息连接上后把文章内容写进去,功能感觉很简单,这样循环连接数据库有坑吗
7月7号:
功能现在全部做完了,由于测试时只循环测了3个库且连接正常就以为上线也行。
上线后站很多一下加了70多个站,但数据库其实只有2个只是库名不一样,运营一次性要对20个站上传文章,且是同一个库,我这就要循环20次检测连接代码是这样的
public static function testConnection(SiteInfo $site): bool
{
$connection = null;
try {
$pdo = new PDO(
"mysql:host={$site->db_host};port={$site->port}",
$site->db_username,
$site->db_password,
[
PDO::ATTR_PERSISTENT => false, // 禁用持久连接
// 添加TCP keepalive选项
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
PDO::ATTR_TIMEOUT => 2,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]
);
$connection = new MySqlConnection($pdo);
// $connection->select('SELECT 1');
return true;
} catch (\Exception $e) {
Log::channel('conn')->error($e->getMessage());
return false;
} finally {
// 释放连接资源
if ($connection instanceof Connection) {
$connection->disconnect();
}
}
}
我的理解是即使是循环也是连上了就释放,下一个继续,不存在占用连接数,但实际上在循环大概10多次后就报Connection timed out,难道释放连接不是马上的?
能跑就行。
如果只是针对发文章不想切换站点重复登录这个问题,你不如搞一个
webview
套壳的客户端,在服务端开个专用API
,授权验证用专门的ApiKey
和AppSecret
,一次配置终生使用,体验不是更好吗你单独开一个fpm 的程序,主要是把你那些数据库配置集中写,然后专门写一个发布文章的功能,webman 这边的程序,每次调用这个fpm 的程序,用来循环数据库插入
或者,你把数据库配置什么写到webman 这边数据库里,然后每个数据库信息对应标识,然后每次去调用fpm 的时候 把数据信息传递获取,那边根据你传递的数据库信息进行连接
顶一下
链接弄个单例模式可行不
你吧数据库配置信息都存储到数据库一个表里面,调用这个方法执行就可以了