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