2010-05-04 3 views
0

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

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

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

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

ответ

1

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

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

Будет ли эта модель работать для вашего сценария?

More reasons to opt for poll instead of push
Periodic_Refresh

0

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

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

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

Смежные вопросы