我们有一个日历API,用于在一天内预订广告位
SlotShcema
endDateTime = startDateTime + duration
我们可以计算插槽结束
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "database";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
session_start();
$result = $conn->query('SELECT mail FROM check_out ORDER BY id DESC LIMIT 1');
$to = $result->fetch_assoc();
mail($to['mail'] , "ORDER", "Your order is placed !","From: vape@v.com");
$_SESSION['message'] = "Order placed successfuly";
if (isset($_GET['up'])) {
$Orderid = (int) $_GET['up'];
$stmt = $conn->prepare('DELETE FROM check_out WHERE id=?');
$stmt->bind_param('i', $Orderid);
$stmt->execute();
}
$conn->close();
header('location:index.php');
我们想要添加验证,因此没有两个插槽相交,只有一个用户可以预订。
我找到了服装Github,但我们找不到任何适用于我们情景的文档。
问题是找到解决竞争条件的方法,其中两个并发保存可能会保存冲突的预订&#34;交易&#34; 。我在开始创建插槽之前做了我自己的验证功能,但是如果存在竞争条件,它可能同时保存两个插槽,这是错误的。 有没有办法解决竞争条件?
GitHub问题Async Custom Validators
答案 0 :(得分:0)
为我工作的最后工作是使用回调调用队列中的函数。它适用于我,但它有点慢。
这是一个例子JS-Promise-Race-Condition-Queue
如果你想让这个解决方案更快,你应该为每个交集创建队列,这将导致并发冲突。例如日期范围。
您应该按照上面的github问题链接了解有关情况的更多信息。