Блог веб разработки статьи | видеообзоры | исходный код

Блог веб разработки статьи | видеообзоры | исходный код

webfanat вконтакте webfanat youtube

Обработка событий от сервера(EventSource) в html5.

Обработка событий от сервера(EventSource) в html5.

Здравствуйте дорогие друзья и поехали! С помощью объекта EventSource мы можем осуществлять одностороннюю передачу сообщений с сервера. То есть это когда веб страница через определенный промежуток времени автоматически получает обновления с сервера.

В прочем это было реализовано и раньше, но только веб страница должна была спросить у сервера доступны ли новые обновления. С использованием событий от сервера eventSource, все обновления поступают от сервера автоматически без дополнительных запросов с веб страницы.

Давайте рассмотрим как это работает.

<script>
var source = new EventSource("test.php");
</script>

На веб странице создаем объект класса EventSource и в качестве его аргумента передаем путь к файлу на сервере от которого будут приниматься обновления. Следовательно нам нужно создать такой файл на сервере, в моем случае это test.php. В нем у нас следующий php код.

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
echo "data: Время на сервере :".date("H:i:s d-m-Y")." \n\n";

Отмечу что здесь мы обязательно должны передать первый заголовок('Content-Type: text/event-stream'), иначе ничего работать не будет. В качестве второго заголовка я передал отмену кеширования. И затем с помощью echo вывел сообщение которое показывает время на сервере. Причем заметьте в каком формате я реализовал вывод:

echo "data: ваше сообщение от сервера\n\n";

У вас должно выводится сообщение именно в таком же формате иначе ничего работать не будет. Ведь именно данное сообщение будет переодически отсылаться на нашу веб страницу с сервера.

Теперь на веб странице нам осталось дописать метод объекта EventSource с помощью которого мы будем принимать все сообщения от сервера.

<div id="time"></div>
<script>
    var source = new EventSource("test.php");
    source.onmessage = function(event) {
       document.querySelector('#time').innerHTML = event.data;
    };
</script>

Тут с помощью метода onmessage мы будем получать сообщения от сервера и через свойство объекта события event.data задавать их в качестве содержимого элемента с идентификатором time.

Обновляем веб страницу и смотрим. Если вы все сделали правильно, то у вас через определенные промежутки времени(у меня раз в три секунды) должно приходить новое сообщение от сервера с обновленной информацией в моем случае это время. То есть я вижу как раз в три секунды у меня обновляется время, полученное с сервера.

Вы можете проверить и через консоль.

source.onmessage = function(event) {
       console.log(event.data);
  };

Теперь у вас в консоли будет идти стек с сообщения от сервера.

Еще хочу сказать что у объекта EventSource есть еще методы onopen и onerror. Первое как вы наверное уже догадались возникает в результате установления соединения с сервером, а второе в случаях ошибок и обрывах в соединениях.

Давайте добавим их в наш код:

var source = new EventSource("test.php");
source.onmessage = function(event) {
   console.log(event.data);
};
source.onopen = function() {
    console.log('Соединение с сервером установлено');
};
source.onerror = function() {
    console.log('Соединение с сервером прервано');
};

В результате работы данного скрипта мы можем наблюдать следующее, при получении сообщения от сервера у нас устанавливается с ним соединение, а как только сообщение получено оно тут же закрывается. И все наши методы по сути отрабатывают при успешном получении сообщений.

Вот в принципе и все что я хотел вам рассказать дорогие друзья. Данную технологию можно использовать при динамических обновлениях результатов, времени, курсы валюты и т.п.

Надеюсь данная статья была для вас полезна и содержательна. А я же с вами прощаюсь и желаю удачи! Пока!

Оцените статью:

Статьи

Комментарии

Внимание!!! Комментарий теперь перед публикацией проходит модерацию

Все комментарии отправлены на модерацию

Реклама

Запись экрана

Данное расширение позволяет записывать экран и выводит видео в формате webm