[英]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.