2013-09-06 2 views
0

Я пытаюсь, чтобы экземпляры клиентской стороны могли обнаруживать, когда другие экземпляры на стороне клиента отправляют что-то, а затем извлекают это сообщение. (Так что я думаю, что это похоже на чат-систему, но для моей реализации это не для этого)Как вы создаете и обнаруживаете одноразовые события, отправленные сервером?

Я пытаюсь использовать серверные события.

Я заметил, что с базовой структурой 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, так что в потоке на стороне клиента будут отображаться только определенные сообщения.

ответ

Смежные вопросы