fpweb выдать поток

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
gluhow
новенький
Сообщения: 41
Зарегистрирован: 13.08.2015 14:30:20

fpweb выдать поток

Сообщение gluhow »

Пытаюсь написать REST приложение с помощью FastCGI.
Я хочу выдать пользователю поток данных, который бы он мог сохранить у себя на компе. Данные я сам генерю, причем не очень быстро.
Попробовал изобразить что-то типа:

Код: Выделить всё

procedure TFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest;
  AResponse: TResponse; var Handled: Boolean);

    AResponse.ContentType:='application/octet-stream';
    Stream:=TStringStream.Create('');
    AResponse.ContentStream:=Stream;
    while (True) do
       begin
         Inc(Counter);
         OldPosition:=Stream.Position;
         Stream.WriteString(Counter.ToString+' ');
         NewPosition:=Stream.Position;
         Stream.Position:=OldPosition;
         AResponse.ContentLength:=NewPosition-OldPosition;
         AResponse.SendContent;
         Stream.Position:=NewPosition;
       end;

end;

Но при этом выдаётся только первые данные. А хотелось бы выдавать по мере рассчета. В каком направлении стоит двигаться?
grot
новенький
Сообщения: 82
Зарегистрирован: 13.02.2010 15:33:03

Сообщение grot »

Но при этом выдаётся только первые данные. А хотелось бы выдавать по мере рассчета. В каком направлении стоит двигаться?


Надо начать, простите за банальность, с понимания основ Web ( протокола HTTP )...

После :
AResponse.SendContent;
соединение с клиентом закрывается - ибо это HTTP 1.0 ( v 1.1 - не поддерживает fpWeb )

Надо сделать так , как обычно отдается какой-нибудь файл с сервера :
1. создать файл
2. отдать его за 1 раз ( см. возможные ограничения по объему в промежуточных звеньях )

а для подхода "по мере расчета" существуют WebSockets
- нужен "понимающий это клиент" и другой сервер - не поддерживается fpWeb ...
gluhow
новенький
Сообщения: 41
Зарегистрирован: 13.08.2015 14:30:20

Сообщение gluhow »

Спасибо, буду читать WebSockets
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

А не проще с самого клиента запрашивать следующую порцию.. как зделано в Youtube
Этот кусок данных считал нужен следующий.
Ответить