我正在尝试让客户端实例能够检测其他客户端实例何时发布内容,然后检索该帖子。 (所以我想这就像一个聊天系统,但对于我的实现它并不意味着那个)
我正在尝试使用服务器端事件。
我注意到,使用基本的SSE结构,客户端的Javascript监听传入的服务器PHP输出,每隔几秒左右就会得到一个连续的消息流。
如何将用户实例POST数据(通过HTML表单)发送到服务器PHP脚本,该脚本接收数据并将其转换为SSE-Style JSON,输出(echo)它,然后拥有所有用户-instances检测并检索一个帖子,只检测一次?
例如,这是我的基本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">
下,我会按照我自己的要求每3秒连续获得一次undefined
。像这样:
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实际上正在检索表单数据,但由于某种原因它不会显示。它仍将继续读取未定义(或者更确切地说,不显示任何内容)。 / p>
如果我能实现这一点,我计划过滤掉undefined undefined
个消息,这样只有定义的消息才会显示在客户端流中。