|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Кеширующий HTTP прокси сервер на основе IndyHTTPProxyServer
Добрый день пробую написать свой кешируюший прокси.
На данный момент выбрал компонент IndyHttpProxyServer. Код:
procedure TForm1.idhtprxysrvr1HTTPDocument(ASender: TIdHTTPProxyServer; const ADocument: String; var VStream: TStream; const AHeaders: TIdHeaderList); var i: Integer; ext, file_patch, dir_file: String; isFileCache: Boolean; const sExt: String = '.jpg.swf.gif.js.css.png.ico'; begin file_patch:= ADocument; i:= pos('?', file_patch); Delete(file_patch, i, Length(file_patch) - i + 1); i:= LastPos('.', file_patch); ext:= LowerCase( Copy(file_patch, i, Length(file_patch) - i + 1) ); isFileCache:= pos(ext, sExt) > 0; if isFileCache then begin dir_file := write_file_cache(file_patch); if FileExists(dir_file) then begin mmo1.Lines.Add(IntToStr(VStream.Size)); if VStream.Size > 10 then TMemoryStream(VStream).LoadFromFile(dir_file); end else begin TMemoryStream(VStream).SaveToFile(dir_file); end; end; if (page_tp = '') and (Pos('srv/user/bpxml?mode=backpack', ADocument) <> 0) then begin // TMemoryStream(VStream).Read() end; end; Данный код срабатывает на событии OnHTTPDocument. Но есть несколько подозрений 1) Событие OnHTTPDocument срабатывает когда уже полностью загружен файл из интернета из-за чего смысла в загрузке данных в поток с диска в данном событии смысла нет. Так ли это? Если да то на каком событии пробовать записывать данные в поток с диска чтобы ускорить загрузку? 2) Так же есть подозрение что при сохранении через SaveToFile и загрузке через LoadToFile происходит замедление загрузки страницы т.д. обрабатывается все это не в потоке и ждет последующую загрузку/сохранения файла. Если так то как поправить? Есть идея что сохранять файлы надо каждый в отдельном потоке разбивая файл к примеру на 20 потоков и каждый поток читает к примеру по 50 байт и записывает в один файл. Тоже самое с чтением файла. 20 потоков считывает файл по 50 байт и записывают их в поток. Подскажите по этому поводу. |
#2
|
|||
|
|||
Тут одни дилетанты и флудеры, тебе не помогут. В нашем мире только в одиночку.
|
#3
|
|||
|
|||
посмотри тут: http://www.delphimaster.net/view/6-1218021112
готовый IndyHTTPProxyServer явно кривоват. |