Прокси на FreePascal...

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Прокси на FreePascal...

Сообщение Andreich »

Скажите пожалуйста, кому-нибудь попадалась информация по сабжу или возможно какие-то примеры есть? Просто появилась идея попробовать написать нечто подобное (без каких либо наворотов разумеется), чисто из спортивного интереса! Буду крайне признателен за любую информацию, ссылки или примеры!
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

Спасибо за ссылку, посмотрю что это за зверь такой GpHTTPProxy,.. правда насколько я успел понять эта вещь расчитана на Windows, быть может существуют кроссплатформенные варианты?
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

1. слушать сокет
2. прочитать запрос
3. выдрать запрашиваемый URL и заголовок host, если есть (если нет, то выдрать host из URL)
4. отправить полученый запрос как есть на host
5. ответ как есть передавать клиенту.
6. закрыть соединение.

самая простая реализация без учета таких заморочек как кеширование, подмена заголовков, SSL, HTTP-авторизация и т.п.
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

Я понимаю, что реализация будет основана на сокетах, но как это делается в линуксе (какие функции/библиотеки используются) я представляю смутно. Поиск по яндексу выдает огромное количество ссылок, но все они относятся к windows и описывают работу либо с готовыми компонентами, либо с WinSocet. Отсюда вопрос: существуют ли примеры по работе с сокетами на FreePascal?
ev
долгожитель
Сообщения: 1797
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение ev »

Отсюда вопрос: существуют ли примеры по работе с сокетами на FreePascal?

полно
на сайте надо глянуть в раздел ссылок - инди и синапс ;)
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Andreich писал(а):но все они относятся к windows и описывают работу либо с готовыми компонентами, либо с WinSocet.

WinSocket слизан с бсдшных сокетов + добавили ещё кучу своих функций с перфиксом WSA (которые неизвестно кто использует). А так в приницпие API один и тот же. Для работы достаточно подключить юнит sockets - там все эти функции и для Windows и для nix*
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

Подскажите такую вещь,.. в одном из примеров по программированию прокси встретилась следующая конструкция:

(код на Delphi)

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

type TServerThread = class(TThread)
  private
  {private declarations}
  protected
    procedure Execute;  override;
  public
    iLocalPort, iExtProxyPort : integer;
    sExtProxyAddr : string;
end;

При попытке скомпилировать это же самое в Lazarus получаем ошибку:
main.pas(35,15) Error: Forvard declaration not solved "TServerThread.Execute;"

Что это за директива такая override? По всей видимости она по разному работает в Delphi и Lazarus?!
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

А реализация процедуры TServerThread.Execute; в коде есть?
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

Да, в примере такая функция есть, но до ее реализации я еще не добрался. Т.е. выходит, что без описанной процедуры использование override неуместно? Возможно задам совсем глупый вопрос, но просто раньше никогда с использованием override,.. За что отвечает эта директива и почему нельзя обойтись без нее?
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Это переопределение виртуальной функции, которая есть в родительском классе. К данной ошибке override отношение не должно иметь.

А вы можете найти в исходнике эту реализацию?
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

Дож писал(а):А вы можете найти в исходнике эту реализацию?

Разумеется,.. правда сейчас не имею возможности разместить здесь код, т.к. это сканированный вариант книги.
(постараюсь набрать сегодня)
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Т.е. в вашей программе на компе ее нету? :)
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

Уже есть! :) Сори за подобный ляп с моей стороны, теперь все в порядке!

Добавлено спустя 16 часов 40 минут 40 секунд:
Итак, в качестве средства реализации прокси-сервера остановился на IdMappedPortTCP, но вот незадача, при использовании этого компонента загрузка процессора резко возрастает до 90% (а то и более) и все начинает жутко тормозить. Можно ли отследить статистику/работу этого компонента, чтобы понять в чем причина столь высокой загруженности системы?
Ответить