Я разрабатываю веб-приложение, где пользователь может запросить услугу, и поставщик будет доступен для ответа на него. Итак, когда пользователь запрашивает какую-то услугу, наше приложение отправит уведомление поставщику (попросив его ответить на пользователя). Я пытаюсь сделать так: когда пользователь запрашивает услугу, поставщик мгновенно получает уведомление (что-то вроде facebook).
Один из способов получить это – использовать AJAX для отправки запросов на сервер каждые 5-10 секунд; то, что мы называем, является опросом (пока я знаю). Но у этого метода есть некоторые недостатки, я вижу: –
Итак, я хотел знать, есть ли какая-то методика, когда мы можем мгновенно обновлять нашу веб-страницу, когда в нашей системе происходят изменения без запроса опроса с использованием AJAX.
вот простой сценарий событий, отправленных сервером, с использованием php.
поддержка
https://developer.mozilla.org/en-US/docs/Web/API/EventSource
JS
var sse=new EventSource("sse.php"); sse.onmessage=function(e){ document.body.innerHTML=e.data; };
sse.php
header('Content-Type: text/event-stream'); // specific sse mimetype header('Cache-Control: no-cache'); // no cache while(true) { if(/*something changes*/){ echo "id: ".time().PHP_EOL; echo "data: ".$data.PHP_EOL; echo PHP_EOL; } ob_flush(); // clear memory flush(); // clear memory sleep(10);// seconds }
это держит соединение открытым с клиентом,
то он проверяет, что что-то изменилось … db / file
выводит данные при изменении
и затем очищает кеш php
ждет 10 секунд и делает это снова.
Как вы можете видеть, клиент получает данные только в том случае, если что-то меняется на сервере
но я полностью не знаю, как сервер может обрабатывать 1000 человек.
node.js будет лучшим способом. но это зависит от того, какие языки вы используете, и / или если вы действительно можете использовать node.js.
websockets – оба пути.
сервер отправил событие в нужное время (вам это нужно)
РЕДАКТИРОВАТЬ
больше данных внутри sse-ответа:
JS
var sse=new EventSource("sse.php"); sse.onmessage=function(e){ console.log(JSON.parse(e.data)) };
sse.php
header('Content-Type: text/event-stream'); // specific sse mimetype header('Cache-Control: no-cache'); // no cache while(true) { if(/*something changes*/){ echo "id: ".time().PHP_EOL; $dataArray=array('id'=>$id,'name'=>$name,'more'=>$more); echo "data: ".json_encode($dataArray).PHP_EOL; echo PHP_EOL; } ob_flush(); // clear memory flush(); // clear memory sleep(10);// seconds }
если вам нужна дополнительная информация, просто спросите