Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2019.03.17;
Скачать: CL | DM;

Вниз

Скачивание без сохранения в Synapse   Найти похожие ветки 

 
Artem78 ©   (2016-11-13 15:34) [0]

На сервере лежит большой файл. Нужно для сервера произвести "имитацию" скачивания файла - т.е. просто передать файл без дальнейшей обработки (а-ля wget mysite.com > /dev/null). Но Synapse целиком загружает файл в память программы. Можно ли сделать, чтобы при получении порции данных она сразу же удалялась из памяти?


 
kilkennycat ©   (2016-11-14 12:47) [1]

Если исходники доступны - можно. Если недоступны - нет.


 
iop ©   (2016-11-14 12:57) [2]

Нужно для сервера произвести "имитацию" скачивания файла -

тестирование сервера?

ну так ему вообще пофик сохраняется ли там файл на диск, помещается ли он целиком в памяти, читается ли кусочками и т.д.

тестируй его браузером.


 
Artem78 ©   (2016-11-15 02:45) [3]


> Если исходники доступны - можно. Если недоступны - нет.

Не понял чьи исходники, поясните.


> тестирование сервера?

Нет не это. Нужно просто скачать файл без сохранения. Чтобы трафик пошёл. Цитирую заказчика: "Мы не сервер обманываем, а провайдер (по задумке) :)". И обязательно через Synapse, так в остальной части проекта мы его везде используем.

У меня сейчас в коде есть типа этого:
 with THTTPSend.Create do
 try
   Sock.OnStatus:=Status;
   HTTPMethod("GET", Url);
 finally
   free;
 end;

Может, например, есть какая-либо возможность в Sock.OnStatus очищать принимающий буфер при получении очередной порции данных?


 
iop ©   (2016-11-15 10:59) [4]

серверу пофик на твои буфера.
провайдеру фиолетово вообще на все.

они оба не в курсе твоих телодвижений с выкачанными байтами.

Мы не сервер обманываем, а провайдер

никого кроме себя самих вы не обманываете.


 
kilkennycat ©   (2016-11-15 13:45) [5]


> Не понял чьи исходники, поясните.

Synapse, разумеется. Неужели были еще варианты?


 
kilkennycat ©   (2016-11-15 13:52) [6]


> iop ©   (15.11.16 10:59) [4]

в сочетании с

> И обязательно через Synapse, так в остальной части проекта мы его везде используем.

они там уже трижды себя обманули


 
Artem78 ©   (2016-11-15 14:46) [7]

Мне заказчик подробности зачем ему это нужно не разъясняет, моё дело делать так как велят, а не допрашивать. Вместо того чтобы разглагольствовать, могли бы на изначальный вопрос помочь ответить. Ну возьмём например какой-нибудь Download менеджер. Он же не загружает весь гигабайт в память, а потом сохраняет на диск. Он его скачивает небольшими частями и часть сразу сохраняет. Неужели невозможно с Синапсисом сделать также, только без сохранения?


 
iop ©   (2016-11-15 14:54) [8]

Он же не загружает весь гигабайт в память

естественно не загружает.
его же не артемка писал, а программисты.


 
stas ©   (2016-11-15 14:56) [9]

http://www.webdelphi.ru/2011/07/biblioteka-synapse-rabota-s-modulem-httpsend-pas/#rangestart_rangeend ?


 
iop ©   (2016-11-15 15:14) [10]

Но Synapse целиком загружает файл в память программы

Брехня.

function HttpGetBinary(const URL: string; const Response: TStream): Boolean;


 
iop ©   (2016-11-15 15:27) [11]

ухаха.
синапс - гениальная либа.

function HttpGetBinary(const URL: string; const Response: TStream): Boolean;
var
 HTTP: THTTPSend;
begin
 HTTP := THTTPSend.Create;
 try
   Result := HTTP.HTTPMethod("GET", URL);
   if Result then
   begin
     Response.Seek(0, soFromBeginning);
     Response.CopyFrom(HTTP.Document, 0);
   end;
 finally
   HTTP.Free;
 end;
end;

HTTP.Document = мемори стрим.


 
Artem78 ©   (2016-11-15 17:27) [12]


> Но Synapse целиком загружает файл в память программы
>
> Брехня.


iop, Вот смотрите.
До запуска скачивания: http://itmages.ru/image/view/5189442/b6f30176
И через пару минут: http://itmages.ru/image/view/5189443/2bee8cd9

Что же тогда съело память если не Синапс?

Вот накидал демку, взгляните сами: https://yadi.sk/d/wgA6qb04yg6Ht


 
iop ©   (2016-11-15 17:38) [13]

зачем?
я же написал выше что либа "гениальная"


 
Artem78 ©   (2016-11-15 17:43) [14]

Ну и что вы предлагаете, весь проект переписать на Indy? Боюсь заказчик мне за это денег не накинет, бюджет и так "впритык"...


 
iop ©   (2016-11-15 17:52) [15]

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


 
iop ©   (2016-11-15 18:13) [16]

есть у тебя два паблишед свойства

property Document: TMemoryStream read FDocument;
property Sock: TTCPBlockSocket read FSock;

вешаешь на Sock onStatus, и в нем на HR_ReadCount при размере скачанного кратном допустим мегабайту чистишь текущий документ в ноль.


 
stas ©   (2016-11-15 18:43) [17]


> Ну и что вы предлагаете, весь проект переписать на Indy?


Можно WinApi использовать.


 
stas ©   (2016-11-15 18:44) [18]

Artem78 ©

А что stas ©   (15.11.16 14:56) [9] не подходит?


 
Artem78 ©   (2016-11-15 19:14) [19]

Читаю... А нет какой-нибудь готовой функции-обёртки с уже реализованым циклом, обработкой заголовка, проверкой поддержки сервером range и пр.?


 
stas ©   (2016-11-15 19:26) [20]

Artem78 ©   (15.11.16 19:14) [19]
по ссылке пример есть, который можно скачать.



Страницы: 1 вся ветка

Текущий архив: 2019.03.17;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.004 c
1-1360749669
OtherSide
2013-02-13 14:01
2019.03.17
Memory mapped file для IPC


2-1479119293
Opera
2016-11-14 13:28
2019.03.17
Работа с браузером Opera


15-1477776601
Юрий
2016-10-30 00:30
2019.03.17
С днем рождения ! 30 октября 2016 воскресенье


2-1479215948
Алексис
2016-11-15 16:19
2019.03.17
Обработка очереди сообщений жрет 25% процессора


15-1476990536
Belkin
2016-10-20 22:08
2019.03.17
Простая защита приложения