如何使用POST请求更新SSE服务器已发送事件消息

问题描述

请原谅,我对后端开发还很陌生。

我试图实现的目标很简单。我想向我的服务器发送一个POST请求。举个例子; www.domain.com/api.php?id=foo

并使用该值用该参数更新我的SSE。但我似乎无法弄清楚。我想我需要以某种方式将该值存储在数据库或文本文件中?为简单起见,最好在文本文件中。

我现在所拥有的:

HTML文件

<!DOCTYPE html>
<html>
    <body>

        <h1>Getting server updates</h1>
        <div id="result"></div>

        <script>
            if(typeof(EventSource) !== "undefined") {
                var source = new EventSource("demo_sse.PHP");
                source.onmessage = function(event) {
                    document.getElementById("result").innerHTML += event.data + "<br>";
                };
            } else {
                document.getElementById("result").innerHTML = "Sorry,your browser does not support server-sent events...";
            }
        </script>

    </body>
</html>

PHP文件

<?PHP
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$test = "One";
echo "data: Page: {$test}\n\n";
flush();
?>

所以我的问题是:如何从POST请求中更改变量“ test”的值,以便更新SSE?

现在它可以完美工作,如果我更改PHP文件中的值,它将开始在HTML中吐出来。但是,如何通过外部调用(例如POST调用)更改该值?

谢谢!并且让我知道是否需要澄清。

解决方法

好的,所以我设法使其与SQL数据库一起使用。 :)这是我的解决方案:

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

// QUERY THE DATABASE FOR CURRENT PAGE NUMBER
$db = new mysqli($host,$username,$password,$database_name); // connect to the DB
$query = $db->prepare("SELECT number FROM page WHERE itemId=1"); // prepate a query
$query->execute(); // actually perform the query
$result = $query->get_result(); // retrieve the result so it can be used inside PHP
$r = $result->fetch_array(MYSQLI_ASSOC); // bind the data from the first result row to $r

// ECHO SERVER SENT EVENT
$pageNumber = $r['number'];
echo "data: Page: {$pageNumber}\n\n";
flush();

// UPDATE QUERY BASED ON GET PARAMATERS
$siteURL = $_GET['page'];
$updateQuery = $db->prepare("UPDATE `page` SET `number` = '$siteURL' WHERE `page`.`itemId` = 1;");
$updateQuery->execute();

?>