我试图让客户端实例能够检测其他客户端实例何时发布某些内容,然后检索该帖子。(所以我想它就像一个聊天系统,但对于我的实现来说,它不是为了那个)
我正在尝试使用服务器端事件。
我注意到,对于一个基本的 SSE 结构,客户端的 Javascript 监听传入的服务器 PHP 输出,我每隔几秒左右就会收到一个连续的消息流。
如何将用户实例 POST 数据(通过 HTML 表单)发送到服务器 PHP 脚本,该脚本接收数据并将其转换为 SSE 样式 JSON,输出(回显)它,然后让所有用户实例检测并检索它一个帖子,只有一次?
例如,这是我的基本 SSE 结构:
接收 POST 数据并输出 JSON 数据的 PHP 脚本 (stream.php)
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
function sendMsg($name, $msg) {
echo "data: {\n";
echo "data: \"name\": \"$name\", \n";
echo "data: \"msg\": \"$msg\", \n";
echo "data: \"id\": 1\n";
echo "data: }\n";
echo PHP_EOL;
ob_flush();
flush();
}
sendMsg($_POST['name'], $_POST['message']);
用于侦听和接收服务器发送数据的客户端 Javascript(在 index.php 中)
var source = new EventSource('stream.php');
}
source.addEventListener('message', function(e) {
var data = JSON.parse(e.data);
$("#stream").prepend(
"<div class='newitem'>" +
data.name + ": " + data.msg +
"</div>"
)
}, false);
在 下<div id="stream">
,我会得到一个连续的流undefined
,每 3 秒一个,我应该这样做。像这样:
undefined undefined
undefined undefined
undefined undefined
....
现在,我怎样才能有一个像下面这样的表单,并让上面的流检测并显示提交的数据?
向服务器发送数据的 HTML 表单(在 index.php 中)
<form action="stream.php" method="POST">
<input name="name" id="name" type="text"/>
<textarea id="message" name="message"></textarea>
<br>
<input name="submit" id="submit" type="submit" value="Send"/>
</form>
所以希望,我下面的流<div id="stream">
看起来像这样?
undefined undefined
Bob: Hello
undefined undefined
....
目前,尽管 stream.php 实际上正在检索表单数据,但由于某种原因它不会显示。它仍将继续读取未定义(或者,更确切地说,不显示任何内容)。
如果我能做到这一点,我打算只过滤掉undefined undefined
消息,这样只有定义的消息才会显示在客户端流中。