Как добиться управляемой прерываниями связи между сервером и клиентом с сервлетами? - PullRequest
0 голосов
/ 18 июля 2010

мы написали на C ++ приложение для совместного использования экрана на основе отправки скриншотов.

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

Теперь мы пытаемся разместить его на google app engine, поэтому нам нужны 'servlet' -zeze и 'sandbox' код сервера, чтобы реализовать эту пересылку через HTTP-запросы.

Я представляю себе следующее: 1. Разместите запрос со скриншотом в виде нескольких данных (apache uploads ..). Но теперь серверу необходимо связаться с указанным клиентом (вошедшим в систему), чтобы отправить его / переслать скриншот. Я не уверен, как «инициировать» такое соединение от сервлета к клиенту. Клиент не запускает никакую среду сервлетов (конечно). Я знаю, что HTTP 1.1 поддерживает TCP-соединение, но, похоже, gapps не позволят мне его использовать.

1 подход, который приходит на ум, это отправить CONTINUE 100 каждому вошедшему в систему пользователю при входе в систему и ответить скриншотом, как только он прибудет. При получении клиент делает еще один запрос и так далее. альтернатива (в соответствии с настройкой заголовка обновления для браузера) будет иметь пул приложений на регулярной основе (каждые 5 секунд).

Ответы [ 3 ]

1 голос
/ 19 июля 2010

Вы не сможете сделать это эффективно в GAE.

Проблема 1: Все выходные данные буферизируются, пока ваш обработчик не вернет .

Задача 2: Квоты и ограничения:

Некоторые функции накладывают ограничения, не связанные квоты для защиты стабильности система. Например, когда приложение призвано обслуживать веб запрос, он должен выдать ответ в течение 30 секунд. Если приложение занимает слишком много времени, процесс завершается, и сервер возвращает код ошибки для пользователя. Запрос Тайм-аут является динамическим и может быть сокращается, если обработчик запроса достигает его тайм-аут часто, чтобы сохранить ресурсы.

Поддержка Comet включена в план продукта , но мне все еще кажется, что ваше приложение плохо подходит для приложения GAE.

0 голосов
/ 13 марта 2011

Это поздний ответ, я знаю, но я считаю, что у Google есть ответ на это требование: API канала .

0 голосов
/ 21 июля 2010

Long Polling - концепция, используемая для такой асинхронной связи между сервером и клиентом. В длинном опросе сервлет хранит карту клиента и связанных сообщений. Ключ Map - это идентификатор клиента, а значение - список сообщений, отправляемых клиенту. Когда клиент открывает соединение с сервером (отправляет запрос сервлету), сервлет проверяет карту, есть ли на него какие-либо сообщения. Если он найден, он отправляет клиенту сообщения о выходе из метода. Получив сообщения, клиент открывает новое соединение с сервером. Если сервлет не находит никаких сообщений для данного клиента, он ожидает обновления Карты с сообщениями для данного клиента.

...