SSE的PHP代码无法正常工作

时间:2016-01-09 13:50:41

标签: javascript php server-sent-events

我在这里向您询问我编写的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>

0 个答案:

没有答案