首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分叉PHP应用程序中的单数据库连接

分叉PHP应用程序中的单数据库连接
EN

Stack Overflow用户
提问于 2013-09-06 09:44:56
回答 1查看 334关注 0票数 0

我的应用程序使用pcntl_fork来发送监视连接路由器的子进程。因此,我实例化了类ConnectionManager,它将自己划分为需要监视的机器所需的多个子进程。

我使用的是一个外部DB类,它应该实现Singleton模式,但是PHP倾向于为每个分叉子进程建立一个新的数据库连接。

代码语言:javascript
复制
<?php
/**
 * Database
 * implements Singleton Pattern
 * Returns one static object via Get()
 */
include_once '../config/config.php';
class Database{
    private $log;
    public static $dbLink;
    /**
     * returns the reference to the only possible mysql resource
     * @return unknown
     */
    public static function Get(){
        if(!self::$dbLink){
            $log = Logger::getLogger(__CLASS__);
            self::$dbLink = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
            mysql_select_db(DB_SELECT);
            if(!self::$dbLink){
                $log->fatal("Connect to Database failed");
                throw new Exception("Database connection failed: ".mysql_error());
            }
        }
        return self::$dbLink;
    }
        public function Destroy(){
            self::$dbLink = null;
        }
    }


?>

随着被监控路由器数量的增加,这个问题就会出现。目前,我们正在监视大约56台机器,因此应用程序为底层数据库建立了56个唯一的mysql_connections。但是,如果出现被监控的机器数量,我们的方法将与mysql_connection_limit发生冲突。

数据库用于存储每个路由器的通信量。此外,每个子进程存储运行时数据,其中包含例如最后一次检索流量数据或允许运行的数据。

我的问题是,如果可以只使用一个连接。类似于缓存,它收集SQL语句并将它们作为查询发送到数据库。

但是,我如何设计像上面提到的方法呢?

如果需要进一步的信息,只需问一问,我会张贴一些片段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-18 09:11:30

据我所知,在PHP (连接池)中无法做到这一点。

您可以在下一个请求中使用mysql_pconnect来重用。但这可能不能满足你的需要。

否则,这可能对你有用。

pool#readme

“用于预叉服务器的mysql连接池模块(如php)。您可以通过将连接作为父进程和子进程的shariing来限制连接的数量。”

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18654768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档