|
ПРОЕКТЫ ДАННОЙ КАТЕГОРИИ Программа для создания и пересылки документов Скрипт регистрации в вебсервисе Синонимизация, уникализация текста и базы слов Удалённый запуск команд под линукс Hаписать DNS сервер по стратегии epoll Приватный проект для Coder89 - Конвертер XML Все проекты данной категории - 22 TOP 10 ФРИЛАНСЕРОВ Разработка прикладного ПО
|
SOCKS 4 сервер + клиентский компонент Delphi 2007Разработка прикладного ПО, Разработка системного ПО
[Отредактировано: 15.10.2008 в 11:41] Суть в том, чтобы сделать удаленный вызов функций без постоянного соединения с сервером по протоколу SOCKS4. Клиент - это компонент, класс, который реализует определенный интерфейс. Т.е. это не приложение, это компонент - программный модуль ( или несколько модулей ). Компонент этот невизуальный, бросается на TDataModule. Также в клиентской программе имеется модуль, в котором определен только лишь интерфейс. Его определяет программист клиентского приложения. Например, .... type MyInterface = interface(IInvokable) function Func1(P1: byte; P2: WideString; P3: Boolean): Boolean; .... Далее, если в клиентской программе надо вызвать какую-то функцию, то компонент просто преобразовывается к данному интерфейсу. Выглядит это примерно вот так: ... var MySOCKSClient1: TMySOCKSClient; ... begin (MySOCKSClient1 as MyInterface).Func1(P1, P2, P3); ... Вся реализация доступа к серверу, обработки исключений находится внутри класса TMySOCKSClient. Теперь про сервер. Сервер - это приложение, оформленное в виде службы под Windows (главным образом под 2003), которое слушает порт. Сервер состоит как бы из двух частей. Первая часть - это вся его внутренняя реализация. А вторая часть - такой же модуль интерфейса, как и в клиенте + модуль реализации функций, где уже программист пишет свою обработку функции. Что получается? Получается не что иное, как удаленный вызов процедур. Пользователь вызывает функцию в клиентской программе, а бизнес-логика реализуется на сервере, в модуле реализации: ... type TMyType = class(TInvokableClass, MyInterface) function Func1(P1: byte; P2: WideString; P3: Boolean): Boolean; ... implementation function Func1(P1: byte; P2: WideString; P3: Boolean): Boolean; begin // Код обработки данных Result := True; end; Кто работал с THTTPRIO и SOAP, тот легко поймет о чем идет речь. Помимо этого, основным требованием к серверу является эффективное управление потоками с использованием пула потоков. Это означает, что в пуле потоки создаются предварительно и используются повторно. Они создаются до использования и хранятся неактивными в пуле. Когда требуется поток, то он берется из пула и активируется. Если требуется больше потоков, чем есть в пуле, то создаются дополнительные потоки. Когда поток больше не требуется, то вместо его разрушения он деактивируется и возвращается в пул. Также необходимо обеспечить сжатие и шифрование передаваемых данных. Шифрование можно сделать по SSL, можно другое, более быстрое. Ещё один нюанс - аргументы функций всегда являются простыми типами: числа, строки (WideString), логический тип. Т.е. сложные типы данных передавать не придется. Основными критериями качества выступают скорость, низкий объем передаваемых данных, защита информации, с сохранением способности работать через прокси-сервера по SOCKS4. По поводу реализации. Задача не из простых, так как придется программировать сокеты, программистам без сокетного опыта лучше не браться во избежание мороки с глюками. В принципе, можно использовать и WinSocks и Indy 10, или что-то ещё, с чем вы хорошо дружите. Выходными артефактми являются исходные коды двух проектов - клиентского компонента и сервера. Проекты должны компилироваться в Delphi 2007. Проекты не должны использовать платных компонент сторонних разработчиков. Пожалуйста, предлагайте свои варианты - стоимость, сроки, как будете делать.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||