我在这里向您询问我编写的PHP文件。我正在建立一个实时拍卖网站,让用户参与拍卖,每个网站都显示在网站页面上。为了让用户知道其他人何时出价,我使用了SSE系统。我使用AJAX进行用户的出价操作在数据库上的注册(当用户出价时,数据库中项目的价格会高出1美元以上。价格在数据库中以当前价格+ 100存储,因为我只是出于安全原因,存储价格的整数(分数)。 我的AJAX运行良好,因此实际出价。 在页面加载时,我的SSE连接按预期打开。 javascript EventSource对象成功打开了我的PHP文件流,但我无法理解为什么当我使用我的AJAX在拍卖页面上进行测试时,PHP SSE工作者不会向拍卖页面发送消息(这已经打开了流向工人的流)。 以下是PHP代码,用于检查是否有新的出价,并向包含新出价数据的拍卖页面发送消息。
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$mysqli = new mysqli(* data *);
$listings = $mysqli->query("SELECT listing_id, price, buyer_id FROM listings WHERE schedule_requested = '1' AND finished = '0'");
$to_check = array();
while ($li = $listings->fetch_array()) {
$to_check[] = array($li["listing_id"], $li["price"], $li["buyer_id"]);
}
while (true) {
$change = 0;
$listings_2 = $mysqli->query("SELECT listing_id, price, buyer_id FROM listings WHERE schedule_requested = '1' AND finished = '0'");
$different = array();
while ($li_2 = $listings_2->fetch_array()) {
foreach ($to_check as &$li_check) {
if ($li_check[0] === $li_2["listing_id"]) {
if (intval($li_2["price"]) !== intval($li_check[1])) {
$li_check = array($li_2["listing_id"], $li_2["price"], $li_2["buyer_id"]);
$different[] = $li_check;
$change = 1;
}
break;
}
}
}
if ($change === 1) {
echo "data: " . json_encode($different) . PHP_EOL;
echo PHP_EOL;
flush();
}
sleep(1);
}
?>
我希望你能按照我的理由编写这段代码:当连接打开时,将检查和存储所有参与拍卖的资格(包括拍卖的拍品)在名为$to_check
的数组中。每次外部while
循环迭代时,代码再次向数据库发送查询以检查某些价格字段是否已更改。如果它已经发生,代码会向拍卖页面发送一条消息,以便通知用户。
问题在于,当我尝试从拍卖页面出价时,出价成功,但我没有收到来自PHP工作人员的任何消息(这应该告诉我x列表价格已经改变)。这个PHP代码有什么问题?
感谢您的帮助。
P.S。为清楚起见,我还将编写处理SSE系统的Javascript代码。
<script type = "text/javascript">
var evtSource = new EventSource("bidchecker.php");
evtSource.onmessage = function(e) {
console.log("onmessage");
// etc.
}
</script>