Конференция "Сети" » IdHTTPProxyServer и размер ресурса
 
  • kernel © (03.07.08 19:46) [20]

    > Поросенок Винни-Пух ©   (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;



    Это единственное, что у меня почти заработало.
    Почему-то такой код работает через раз :(
    Складывается впечатление, что происходит где-то в цикле подвисание. Иногда страницы вообще не отдаются :(
  • kernel © (04.07.08 10:45) [21]
    Кто-нибудь может подсказать, как по-блочно читать? :)
  • umbra © (04.07.08 11:13) [22]

    > Кто-нибудь может подсказать, как по-блочно читать?

    поскольку сокеты блокирующие, то поблочно читать можно только многократными запросами диапазона байтов ресурса. Для файлов это нормально, для страничек - нет.
    Лучший, по-моему, выход - создать общий ресурс (типа временный файл) + два потока на клиента у прокси. Один читает ответ на запрос и пишет в файл, другой - читает записанное и шлет его клиенту. Но тут надо уже синхронизировать эти потоки так, чтобы тот, который отдает клиенту, не читал все правильно.
  • Поросенок Винни-Пух © (04.07.08 11:16) [23]
    поскольку сокеты блокирующие, то поблочно читать можно только многократными запросами диапазона байтов ресурса. Для файлов это нормально, для страничек - нет.

    не страницу поблочно тянуть, а из тсп соединения читать блоками
  • umbra © (04.07.08 11:32) [24]

    > а из тсп соединения читать блоками

    так оно ж потоковое. тогда всегда есть опасность, что сервер, с которого тянут может обидеться и отключиться :)

    Еще вариант - скачать инди поновее, потому как тот, для которого есть автоматический инсталлятор имеет версию 10.1.5, а текущая - 10.2.3. И в ней проксисервер сильно переделан и, возможно, доведен до ума. Недостаток в том, что устанавливать придется вручную.
    Скачать можно отсюда - ftp://indy.fulgan.com/ZIP/
  • kernel © (04.07.08 12:26) [25]

    > umbra ©   (04.07.08 11:32) [24]

    Спасибо за информацию, сейчас посмотрю новый инди :)
  • kernel © (06.07.08 17:31) [26]
    Собственно, проблема решилась установкой нового Инди, в котором можно задавать режим полнофайловой или потоковой передачи данных. Огромное спасибо umbra, ну и всем, кто откликнулся :)
  • имя (09.11.08 15:32) [27]
    Удалено модератором
 
Конференция "Сети" » IdHTTPProxyServer и размер ресурса
Есть новые Нет новых   [134433   +21][b:0][p:0.001]