Возможно ли иметь асинхронную обработку - PullRequest
0 голосов
/ 04 мая 2010

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

Я ищу предложения этой реализации на стороне сервера. В основном то, что мне нужно, это: 1. клиент подключается к серверу. Я поддерживаю сокет и метаданные о сокете. метаданные содержат какие обновления нужно отправить этому клиенту 2. серверный процесс теперь ждет новых клиентских подключений 3. Еще один процесс будет иметь список всех открытых сокетов и будет проходить через каждый из них и при необходимости отправлять обновления.

Можем ли мы сделать что-то подобное в модуле Apache: 1. Процесс Apache получает новое соединение. Поддерживает состояние связи. Он сохраняет состояние в некоторой глобальной памяти и возвращает обратно к корневому процессу, чтобы показать, что это сделано, чтобы он мог принять новое соединение 2. хотя процесс Apache возвратил статус корневому процессу, он также выполняется параллельно, проходя через глобальное хранилище и отправляя обновления клиенту, если таковые имеются

Так что процесс Apache может делать эти вещи: 1. Имейте больше чем одно соединение, связанное с этим 2. Асинхронно ожидает новое соединение и одновременно обрабатывает предыдущие соединения?

Ответы [ 2 ]

1 голос
/ 04 мая 2010

Это сложная и неэффективная модель обновления. Ваш сервер попытается обновить клиентов, которые были закрыты. И сервер должен поддерживать все эти данные клиента и метаданные (время последнего обновления и т. Д.).

Обычно для непрерывных обновлений в модели опроса используется ajax. У клиента есть таймер JavaScript, который при запуске запускает службу, предоставляющую обновленные данные. Клиент продолжает получать обновления через равные промежутки времени без необходимости писать модуль apache.

Подойдет ли эта модель для вашего сценария?

Больше причин, чтобы выбрать опрос вместо push
Periodic_Refresh

0 голосов
/ 13 апреля 2014

С небольшим патчем для возобновления SUSPENDED подключения mpm_event у меня работает асинхронный модуль Apache. С этим вы можете сделать улучшенный опрос:

  1. JavaScript подключается к Apache и запрашивает обновление;
  2. если обновлений нет, то вместо немедленного ответа модуль использует SUSPENDED;
  3. через некоторое время, после обновления или тайм-аута, где-то срабатывает обратный вызов;
  4. обратный вызов дает клиенту обновление (или сообщение «нет обновлений») и возобновляет соединение;
  5. клиент переходит к шагу 1, повторяя опрос, который с Keep-Alive будет использовать то же соединение.

Таким образом, количество обращений между клиентом и сервером может быть уменьшено, и клиент получает обновление немедленно. (Это известно как обратный Ajax кометы, AFAIK).

...