Обратная связь о прогрессе в сеансе HTTP без сохранения состояния - PullRequest
2 голосов
/ 30 июля 2010

Мне нужно запрограммировать сервер без сохранения состояния для выполнения удаленных методов.Клиент использует REST с параметром JSON для передачи имени метода и его параметров.После обслуживания результата сессия закрывается.Я должен использовать Indy10, TCP / IP в качестве протокола и, следовательно, посмотреть на использование IdHTTPServer.

Большие наборы результатов разбиваются на куски Indy10 и отправляются клиенту по частям.

Моя проблема сейчас:

Методы на сервере предоставляют информацию о ходе выполнения, если для получения результатов требуется больше времени.Это короткие сообщения.Как я могу написать обратно клиенту?

До сих пор я использовал writeflush на сервере, но клиент ждал окончания запроса, прежде чем вернуть полный набор результатов, включая информацию о ходе выполнения.Что я могу сделать, чтобы отобразить / обработать такую ​​информацию о прогрессе на клиенте и при этом оставить соединение открытым для получения дополнительных данных по тому же запросу?

1 Ответ

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

На стороне клиента вместо обычного клиентского компонента HTTP TIdHTTP вместо этого можно использовать класс Indy TIdTCPClientCustom в модуле IdTCPClient для отправки запроса и обработки ответа.

Этот класс дает полный контроль над обработкой ответов сервера. Я использовал класс TIdTelnet в качестве отправной точки для реализации клиента для протокола обмена сообщениями брокера сообщений и нашел его стабильным и надежным как для текстовых, так и для двоичных данных.

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

...