Intereting Posts
Почему запросы отправки php5-fpm медленны, в то время как тот же php-cli-код / ​​консольный завиток работает очень быстро? Маршруты Laravel не работают? Как отступить к совершенно другой странице индекса, если пользователь отключил javascript? как изменить действие формы ссылки в соответствии с `<option>`? Класс form_validation не загружается (codeigniter) создание пользователей moodle и их программное программирование Преобразование postgresql hstore в php-массив Каков наилучший способ передать несколько параметров запроса в restful api? Почему этот facebook создает код альбома, создавая дубликаты альбомов? Внедрение JCrop в загрузке ajax Отменить все переменные в скрипте PHP Ограничение нагрузки Ограничение фильтра в Laravel Smarty: как ссылаться на индекс ассоциативного массива Вставка даты и времени в MySql из PHP Самый быстрый способ сравнить состояние каталога или хеширование для удовольствия и прибыли

Обновление веб-страницы без опроса

Я разрабатываю веб-приложение, где пользователь может запросить услугу, и поставщик будет доступен для ответа на него. Итак, когда пользователь запрашивает какую-то услугу, наше приложение отправит уведомление поставщику (попросив его ответить на пользователя). Я пытаюсь сделать так: когда пользователь запрашивает услугу, поставщик мгновенно получает уведомление (что-то вроде facebook).

Один из способов получить это – использовать AJAX для отправки запросов на сервер каждые 5-10 секунд; то, что мы называем, является опросом (пока я знаю). Но у этого метода есть некоторые недостатки, я вижу: –

  • Поскольку запрос будет отправляться каждые 5-10 секунд, это будет загрузка на сервер, чтобы манипулировать запросами и возвращать пустые данные (очень часто).
  • Также бесполезно отправлять запросы на сервер, даже если обновлений нет.
  • Представьте, что кто-то запросит услугу сразу после ответа сервера на запрос. Таким образом, провайдеры должны ждать еще 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 } 

если вам нужна дополнительная информация, просто спросите