-
> Поросенок Винни-Пух © (02.07.08 16:27) [18] > ... > достаточно иметь два вложенных цикла чтения с сервера и > отдачи браузеру.
А почему именно два цикла? В общем, сделал такое "по-блочное" чтение: var
LStream: TIdStream;
StreamBuf: TIdBytes;
DocSize: Integer;
begin
LStream := TIdMemoryStream.Create; try
ReqBlock := not RequestAllow(reqUrl);
DocSize:=0;
while (ASrc.IOHandler.Connected) and
(ADest.IOHandler.Connected) do
begin
if ASrc.IOHandler.Readable then
begin
ASrc.IOHandler.ReadBytes(StreamBuf, -1, false);
ADest.IOHandler.WriteDirect(StreamBuf);
DocSize:=DocSize + SizeOf(StreamBuf);
end;
end;
end; Это единственное, что у меня почти заработало. Почему-то такой код работает через раз :( Складывается впечатление, что происходит где-то в цикле подвисание. Иногда страницы вообще не отдаются :(
-
Кто-нибудь может подсказать, как по-блочно читать? :)
-
> Кто-нибудь может подсказать, как по-блочно читать?
поскольку сокеты блокирующие, то поблочно читать можно только многократными запросами диапазона байтов ресурса. Для файлов это нормально, для страничек - нет. Лучший, по-моему, выход - создать общий ресурс (типа временный файл) + два потока на клиента у прокси. Один читает ответ на запрос и пишет в файл, другой - читает записанное и шлет его клиенту. Но тут надо уже синхронизировать эти потоки так, чтобы тот, который отдает клиенту, не читал все правильно.
-
поскольку сокеты блокирующие, то поблочно читать можно только многократными запросами диапазона байтов ресурса. Для файлов это нормально, для страничек - нет.
не страницу поблочно тянуть, а из тсп соединения читать блоками
-
> а из тсп соединения читать блоками
так оно ж потоковое. тогда всегда есть опасность, что сервер, с которого тянут может обидеться и отключиться :) Еще вариант - скачать инди поновее, потому как тот, для которого есть автоматический инсталлятор имеет версию 10.1.5, а текущая - 10.2.3. И в ней проксисервер сильно переделан и, возможно, доведен до ума. Недостаток в том, что устанавливать придется вручную. Скачать можно отсюда - ftp://indy.fulgan.com/ZIP/
-
> umbra © (04.07.08 11:32) [24]
Спасибо за информацию, сейчас посмотрю новый инди :)
-
Собственно, проблема решилась установкой нового Инди, в котором можно задавать режим полнофайловой или потоковой передачи данных. Огромное спасибо umbra, ну и всем, кто откликнулся :)
-
Удалено модератором
|