結(jié)論是不使用異步代碼就不會(huì)互相影響
先訪(fǎng)問(wèn)(開(kāi)啟事務(wù)):
/?transaction=1
再訪(fǎng)問(wèn)(不用事務(wù))
/
結(jié)果是數(shù)據(jù)不會(huì)被寫(xiě)入。
因?yàn)閮纱握?qǐng)求,用的connection是同一個(gè),所以會(huì)互相影響,數(shù)據(jù)庫(kù)連接應(yīng)該 每個(gè)請(qǐng)求獨(dú)立分開(kāi)。
雖然我用的是timer計(jì)時(shí)器,但是在高并發(fā)且有大量非阻塞行為的時(shí)候,還是有可能觸發(fā)一樣的問(wèn)題。
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');
}