Запросы событий, отправленных сервером

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

Сценарий 1. Предположим, есть 10 клиентов. Таким образом, все 10 клиентов отправят первоначальный запрос на сервер. Установлено 10 подключений. Когда данные поступают на сервер, сообщение передается от сервера к клиенту.

  • Запрос 1: Будет ли сервер поддерживать IP-адреса всех клиентов? Если да, есть ли API для проверки?
  • Запрос 2: Что произойдет, если все 10 клиентских окон будут закрыты? Будет ли сервер прервать все соединения по прошествии некоторого времени?
  • Запрос 3: что произойдет, если сервер не сможет отправлять сообщения клиенту из-за недоступности клиента, например, выключение машины. Будет ли сервер прервать все соединения по прошествии определенного периода времени для тех клиентов, которым они не могут отправить сообщение?

Просьба уточнить?


person RK Iyer    schedule 08.04.2014    source источник
comment
Вы можете получить больше ответов, если разделите их на отдельные вопросы в StackOverflow, а не публикуете их все вместе. В общем, предпочтительнее размещать один управляемый вопрос, чем размещать целую кучу вопросов, которые могут касаться самых разных вещей.   -  person Trott    schedule 28.09.2014


Ответы (1)


Это зависит от того, как вы реализуете сервер.

При использовании PHP в качестве модуля Apache каждое SSE-соединение создает новый экземпляр PHP, работающий в памяти. Каждый «сервер» одновременно обслуживает только одного клиента. Q1: да, но не ваша проблема: вы просто выводите сообщения на стандартный вывод. Q2 / Q3: Если клиент закрывает соединение по какой-либо причине, процесс PHP завершится, когда он это обнаружит.

Если вы используете многопоточный сервер, например используя http в node.js. В1: IP-адрес клиента является частью абстракции сокета, и вы просто отправляете сообщения объекту response. Q2 / Q3: когда каждое клиентское соединение закрывает сокет, процесс запроса, который его обрабатывал, завершается. После того, как все 10 будут закрыты, ваш сервер будет продолжать работать, но не будет отправлять данные каким-либо клиентам.

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

person Darren Cook    schedule 30.01.2015