tag name first etiquetas all php ajax post polling server-sent-events

name - ¿POST a PHP con eventos enviados por el servidor?



post title wordpress (2)

¿Es posible usar SSE para enviar datos de POST a PHP como en Ajax?

He estado usando AJAX ahora por bastante tiempo con malos resultados en técnicas de larga duración. También he estado pensando en WebSockets, pero parece un poco redundante.


No, SSE no puede enviar datos al servidor.

Todavía puede usar SSE para leer datos en tiempo real y usar AJAX para cargar cualquier información (es posible que necesite una base de datos compartida para pasar información entre los procesos de recepción de AJAX y uno de envío de SSE).


Puede enviar datos a través de GET.

p.ej

name=john&name=lea

Este es un script simple que envía al servidor el número de iteración y el servidor devuelve el progreso usando SSE.

Este proyecto consta de dos archivos (index.php y ssedemo.php).

index.php contiene un cuadro de texto y un botón. el cuadro de texto supone que contiene el número de iteración del ciclo en ssedemo.php

<h2>Server Sent Event Test</h2> <form> <label>Process Duration</label> <input type="text" id="progVal"> <input type="button" value="Get Messages" onclick="updateProgress()"/> </form> <div id="container"> </div>

progreso de actualización

function updateProgress() { var input = $(''#progVal'').val(); var evtSource = new EventSource("ssedemo.php?duration=" + encodeURIComponent(input)); evtSource.addEventListener("progress", function (e) { var obj = JSON.parse(e.data); $(''#container'').html(obj.progress); if( parseInt(obj.progress) == 100){ evtSource.close(); } }, false); }

esta función obtiene el contenido del cuadro de texto usando jQuery y luego crea un eventSource . El constructor EventSource () toma uno o dos argumentos. El primero especifica la URL a la que conectarse. El segundo especifica las configuraciones, si las hay, en la forma de un diccionario EventSourceInit.

Puedes pasar lo que quieras al agregarlo a la URL como lo haces con GET.

"ssedemo.php?duration=" + encodeURIComponent(input)

En el lado del servidor, debe establecer el tipo de encabezado y desactivar la memoria caché de acuerdo con la recomendación W3C

header("Content-Type: text/event-stream"); header("Cache-Control: no-cache");

luego obtienes los datos usando $ _GET como de costumbre.

$TotalNo = $_GET[''duration'']; for ($i = 1; $i <= $TotalNo; $i++) { updateProgress($i, $TotalNo); sleep(1); } function updateProgress($currentVal, $totalNo) { $completionPrecentage = $currentVal / $totalNo * 100; echo "event: progress/n"; echo ''data: {"progress": "'' . $completionPrecentage . ''"}''; echo "/n/n"; ob_flush(); flush(); }

si desea enviar una matriz, puede consultar esta