繁体   English   中英

PHP打开多个连接

[英]PHP Open Multiple Connections

我想在不同的浏览器选项卡中运行同一脚本的多个脚本实例。 我希望他们拥有不同的MySQL连接。 每个都有其独特的联系。

我知道mysql_connect有第四个参数$new_link ,它应该打开一个新链接,但是即使那样也不会打开一个新连接。 有时确实如此。

我在寡妇计算机上安装了XAMPP。

问题是:如何绝对强制PHP / MySQL为脚本的每个实例打开新连接? 脚本运行大约2分钟。

http://localhost/myscript.php

这是MySQL代码的摘录。 首先从数据库加载工作分配并将其标记为进行中:

public function loadRange() {
    try{
        $this->db()->query('START TRANSACTION');
        $this->row = $this->db()->getObject("
            SELECT * FROM {$this->tableRanges}
            WHERE
                status = " . self::STATUS_READY_FOR_WORK . "
                AND domain_id = {$this->domainId}
            ORDER BY sort ASC
            LIMIT 1");
        if(!$this->row) throw new Exception('Could not load range');
        $this->db()->update($this->tableRanges, $this->row->id, array(
            'thread_id' => $this->id,
            'status' => self::STATUS_WORKING,
            'run_name' => $this->runName,
            'time_started' => time(),
        ));
        $this->db()->query('COMMIT');
    } catch(Exception $e) {
        $this->db()->query('ROLLBACK');
        throw new Exception($e->getMessage());
    }
}

然后,脚本可能会或可能不会根据发现的内容在另一张表中插入行。

最后,任务完成后,赋值行将再次更新:

    $this->db()->update($this->tableRanges, $this->row->id, array(
        'status' => self::STATUS_EXECUTED,
        'time_finished' => time(),
        'count' => $count,
    ));

特别是$this->tableRanges表看起来已被锁定。 知道为什么会这样吗? 它是一个InnoDB表。

我想在不同的浏览器选项卡中运行同一脚本的多个脚本实例。 我希望他们拥有不同的MySQL连接。 每个都有其独特的联系。

实际上就是这种情况,无需任何额外的努力

问题是:如何绝对强制PHP / MySQL为脚本的每个实例打开新的连接。

答:什么都不做:)

每次您访问http://localhost/myscript.php都会运行一个新实例。 关于该实例的所有内容都是唯一的,Web服务器产生了一个新的PHP线程,其中所有资源,连接,变量都是唯一的。

如果您在同一浏览器中使用不同的选项卡,则仅共享状态管理设备(例如sessions并且也共享。 如果您使用不同的浏览器访问相同的URL,则状态管理资源也将不同。

要回答您的问题,就像前面提到的其他问题一样-如果您使用mysql_connect ,则每个实例的连接是不同的。 你可以创建一个不关闭时应用程序退出和持续连接reuses它使用新的连接请求mysql_pconnect 但是在您的代码中,似乎您正在使用后者,在这种情况下,您还可以。

您可以尝试设置隔离读取级别以防止表在选择读取时停顿

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

更多信息可以在这里找到。

同样,我猜这将需要一些时间才能找到最合适的选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM