12. Обработчики ввода/вывода (IOHandlers)

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 как источники ввода/вывода, но источники ввода/вывода позволяют и другие возможности.

12.1. Компоненты IOHandler

12.1.1. Компонент TIdIOHandlerSocket

TIdIOHandlerSocket осуществляет низкоуровневое управление сокетами.

Компонент TIdIOHandlerSocket это обработчик IOHandler по умолчанию. Если обработчик не указан явно, то он создается неявно для вас. Компонент TIdIOHandlerSocket обрабатывает весь ввод/вывод, относящийся к TCP сокетам.

Обычно, компонент TIdIOHandlerSocket не используется явно, пока не потребуются расширенные способности.

12.1.2. Компонент TIdIOHandlerStream

TIdIOHandlerStream осуществляет управление сокетами, используя потоки.

Компонент TIdIOHandlerStream используется для отладки и тестирования. При его использовании все взаимодействие с сервером в TCP сессии может быть записаны. Позже вся сессия может быть «проиграна». Компоненты Indy не знают, работают ли они с реальным сервером и реальным соединением.

Это очень мощное средство отладки в дополнение к инструменту QA отладки. Если у пользователя есть проблемы, то специальная версия программы может быть послана пользователю или включены средства отладки для ведения лога сессии. Используя лог файлы, вы можете затем реконструировать сессию пользователя в локальной отладочной среде.

 

TIdIOHandlerThrottle позволяет отображать скорость подключения.

TIdServerIOHandlerSocket обеспечивает низкоуровневое управление вводом/выводом многопотокового сервера.

12.1.3. Компонент TIdSSLIOHandlerSocket

Компонент 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.

Hosted by uCoz