Каковы хорошие примеры использования событий, отправленных сервером - PullRequest
0 голосов
/ 28 апреля 2018

Я обнаружил SSE (Server Sent Events) довольно поздно, но я не могу определить некоторые варианты его использования, чтобы он был более эффективным, чем использование setInterval() и ajax.

Полагаю, если бы нам пришлось обновлять данные несколько раз в секунду, то создание одного единственного соединения привело бы к меньшим издержкам. Но, кроме этого случая, когда действительно выбрать SSE?

Я думал об этом сценарии:

В базу данных добавлен новый пользовательский комментарий с сайта

Сервер периодически запрашивает БД на предмет изменений. Если он находит новый комментарий, отправьте уведомление клиенту с SSE

Кроме того, этот вопрос SSE пришел мне в голову после того, как мне пришлось сделать простую «живую» смену веб-сайта (когда кто-то публикует комментарий, уведомляйте всех, кто находится на сайте). Есть ли действительно другой способ сделать это без периодических запросов к базе данных?

1 Ответ

0 голосов
/ 28 апреля 2018

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

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

До События, отправленные сервером единственный способ получить новые данные с сервера - каждый раз выполнять новый запрос.

опрос

Как вы указали в этом вопросе, одним из способов поиска обновлений является использование setInterval() и ajax запроса. С помощью этой техники наш клиент будет выполнять запрос один раз каждые X секунд, независимо от того, есть новые данные или нет. Этот метод известен как опрос .

События

Отправленные сервером события, напротив, асинхронны . Сервер сам уведомит клиента, когда появятся новые данные.

В сценарии вашего примера вы бы реализовали SSE таким образом, чтобы сервер отправлял событие сразу после добавления нового комментария, а не путем опроса БД.

Сравнение

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

Если вы не уверены в частоте обновлений (как часто новые данные должны быть доступны ), SSE может быть решением, поскольку они избегают всех дополнительных запросов, которые будет выполнять опрос.

Однако в целом неправильно говорить, что SSE производит меньше служебных данных, чем опрос. Это связано с тем, что для SSE требуется открытое соединение TCP . По сути, это означает, что некоторые ресурсы на сервере (например, рабочий и сетевой сокет) выделяются одному клиенту до тех пор, пока соединение не будет установлено. Вместо этого, после ответа на запрос соединение может быть сброшено.

Поэтому я бы не рекомендовал бы использовать SSE, если среднее число подключенных клиентов велико, потому что это может создать некоторые издержки на сервере.

В общем, я советую использовать SSE, только если ваше приложение требует обновлений в реальном времени. В качестве примера из реальной жизни я разработал программное обеспечение для сбора данных в прошлом и должен был предоставить для него веб-интерфейс. В этом случае множество графиков обновлялось каждый раз, когда собиралась новая точка данных. Это было хорошо подходит для SSE, потому что число подключенных клиентов было низким (по сути, только один), пользовательский интерфейс должен обновляться в режиме реального времени, и сервер не был заполнен запросами, как это было бы с опросом.

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

...