Я пытаюсь, чтобы экземпляры клиентской стороны могли обнаруживать, когда другие экземпляры на стороне клиента отправляют что-то, а затем извлекают это сообщение. (Так что я думаю, что это похоже на чат-систему, но для моей реализации это не для этого)Как вы создаете и обнаруживаете одноразовые события, отправленные сервером?
Я пытаюсь использовать серверные события.
Я заметил, что с базовой структурой SSE, где Javascript клиента прослушивает входящие серверные выходы PHP, я получаю непрерывный поток сообщений каждые несколько секунд или около того.
Как я могу получить данные POST пользователя (через форму HTML) на PHP-скрипт сервера, который получает данные и превращает их в SSE-стиль JSON, выдает (эхо) его, экземпляры обнаруживают и извлекают этот пост, и только один раз?
Например, это моя основная структура SSE:
PHP скрипт для приема данных POST и вывод JSON данные (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
, так что в потоке на стороне клиента будут отображаться только определенные сообщения.