Indy может настраиваться и расширяться многими путями, без
необходимости напрямую модифицировать исходный код. Примером такой
расширяемости являются обработчики ввода/вывода (IOHandlers). Обработчики ввода/вывода позволяют вам использовать
любой источник ввода/вывода I/O в Indy.
Обработчики ввода/вывода должны использоваться, когда вы желаете использовать
альтернативный механизм ввода/вывода или создание нового транспортного
механизма.
Обработчики ввода/вывода выполняют весь ввод/вывод (Input/Output) для Indy. Indy не
выполняет ни какого своего ввода/вывода, за пределами обработчика ввода/вывода.
Обработчик ввода/вывода используется для посылки сырых TCP данных для компонент Indy.
Обработчики ввода/вывода позволяют классам
обрабатывать весь ввод/вывод в Indy. Обычно,
весь ввод/вывод делается через сокет и обслуживается обработчиком по умолчанию
- TIdIOHandlerSocket.
Каждый TCP клиент имеет
свойство IOHandler, которое может быть
назначено обработчику IOHandler, как
это делает каждое серверное соединение. Если обработчик IOHandler не указан, то неявно используется TIdIOHandlerSocket, который создается автоматически
и используется TCP клиентом. TIdIOHandlerSocket
реализует ввод/вывод используя TCP сокет. Indy также включает дополнительные обработчики ввода/вывода: TIdIOHandlerStream и TIdSSLIOHandlerSocket.
Другие обработчики ввода/вывода могут быть созданы,
позволяя Indy использовать любые источники
ввода/вывода, которые вы только можете вообразить. В данный момент Indy поддерживает только сокеты, потоки и SSL как источники ввода/вывода, но источники ввода/вывода
позволяют и другие возможности.
TIdIOHandlerSocket осуществляет низкоуровневое управление сокетами.
Компонент TIdIOHandlerSocket это обработчик IOHandler по умолчанию. Если обработчик не указан явно, то он
создается неявно для вас. Компонент TIdIOHandlerSocket обрабатывает весь ввод/вывод, относящийся к TCP сокетам.
Обычно, компонент TIdIOHandlerSocket не используется явно, пока не потребуются расширенные
способности.
TIdIOHandlerStream осуществляет управление сокетами,
используя потоки.
Компонент TIdIOHandlerStream используется для отладки и тестирования. При его
использовании все взаимодействие с сервером в TCP сессии может быть записаны. Позже вся сессия может
быть «проиграна». Компоненты Indy не знают,
работают ли они с реальным сервером и реальным соединением.
Это очень мощное средство отладки в дополнение к
инструменту QA отладки. Если у пользователя
есть проблемы, то специальная версия программы может быть послана пользователю
или включены средства отладки для ведения лога сессии. Используя лог файлы, вы
можете затем реконструировать сессию пользователя в локальной отладочной среде.
TIdIOHandlerThrottle позволяет отображать скорость подключения.
TIdServerIOHandlerSocket обеспечивает низкоуровневое управление вводом/выводом
многопотокового сервера.
Компонент TIdSSLIOHandlerSocket используется для поддержки SSL. Обычно компрессия и декомпрессия данных может быть
реализована с использованием перехватчиков (Intercepts) вместо IOHandlers. Но SSL библиотека
используемая Indy (OpenSSL), работает напрямую с сокетом, вместо трансляции
данных посылаемых Indy. Поэтому
реализация выполнена как IOHandler. . TIdSSLIOHandlerSocket является наследником TIdIOHandlerSocket.
TIdServerIOHandlerSSL, TIdSSLIOHandlerSocket это серверный и клиентский компоненты, обеспечивающие возможность
безопасного SSL-соединения. Протокол SSL(Secure
Sockets Layer -
секретный уровень сокетов) обеспечивает секретность и надежность связи между
двумя приложениями. На низком уровне многоуровнего транспортного протокола(TCP) SSL является
протоколом записи и используется для инкапсуляции различных протоколов более
высокого уровня. Преимущество SSL состоит в
том, что он является независимым протоколом прикладной программы, при этом
протокол более высокого уровня не может быть использован поверх SSL. SSL осуществляет
защиту связи, которая имеет три основных функции:
-
обеспечение конфиденциального соединения,
-
шифрование с открытым ключом,
-
поддержка надежности передачи данных.
В
сочетании с протоколом HTTP и аутинтефикации
сервера, протокол SSL обеспечивает необходимые
функции шифрования и в дальнейшем поддерживает установленное соединение,
перепроверяя подлинность веб-сервера. Следует помнить, что SSL только защищает связь в процессе передачи данных, а
не заменяет другие защитные механизмы. Указанные компоненты обеспечивают
соединение как со стороны клиента, так и со стороны сервера в соответствии с
протоколом SSL.