结论是不使用异步代码就不会互相影响
先访问(开启事务):
/?transaction=1
再访问(不用事务)
/
结果是数据不会被写入。
因为两次请求,用的connection是同一个,所以会互相影响,数据库连接应该 每个请求独立分开。
虽然我用的是timer计时器,但是在高并发且有大量非阻塞行为的时候,还是有可能触发一样的问题。
public function index(Request $request)
{
$connection = Db::connection('default');
if ($request->get('transaction')) {
$connection->beginTransaction();
\Workerman\Timer::add(5, function () use ($connection) {
$connection->rollback();
echo "rollback\r\n";
}, [], false);
} else {
$connection->table('application')->insert([[
'id' => mt_rand(100, 99999),
'author_id' => '11',
'maintainer_id' => '11',
'title' => 'notransaction',
'web' => 'notransaction',
'slogan' => 'notransaction',
]]);
}
return response('hello webman');
}
webman常驻内存的,数据库连接是每个请求公用的。每个请求应该独自完成事物的提交或者回滚
大佬测试了吗,现在就是多个请求会共用链接。
忘了说的是,只开一个进出
我晚点试试不用timer 会不会出现
实测下来,不使用异步的代码确实不会互相影响
如果异步会影响,那队列这种,也会影响?
队列是另外的进程了,根本影响不到。
那就放心了...
队列不影响。如果是异步回调里才做commit 或rollback会有影响