Объясняется это двумя факторами:
В результате, в некоторых случаях, по SOP-протоколу передаются SOP-пакеты, лишь незначительно отличающиеся друг от друга. Например, при выдаче во внешний мир мониторинговой информации. Если мониторинговая информация выдается с большим темпом, то это может привести к передаче большего объема SOP-трафика.
Ситуация могла бы быть значительно улучшена, если бы SOP-трафик сжимался на лету. Поэтому в SObjectizer-е версии v.4.2.7 реализована автоматическая компрессия SOP-трафика (пока только с использованием библиотеки zlib).
Когда два SObjectizer-процесса устанавливают SOP-соединение, клиент инициирует процедуру handshake и сообщает серверу, что он может поддержить компрессию SOP-трафика. Если сервер поддерживает процедуру handshake, то он устанавливает у себя режим компрессии и отсылает клиенту ответ. После получения ответа сервера клиент так же включает у себя компрессию, после чего отсылает на сервер информацию о своем SOP-фильтре. Весь трафик между клиентом и сервером, начиная с сообщения о SOP-фильтре, упаковывается на лету.
Если же сервер не поддерживает handshake (например, написан с использованием предыдущей версии SObjectizer-а), то он отвечает клиенту сообщением об ошибке. Клиент, получив вместо ожидаемого ответа на handshake ошибку, понимает, что сервер не может поддерживать компрессию. Клиент отсылает на сервер сообщение о своем SOP-фильтре. Но весь трафик между клиентом и сервером идет так же, как и в предыдущих версиях SObjectizer-а. Таким образом обеспечивается интероперабельность SObjectizer-а версии 4.2.7 с предыдущими версиями SObjectizer-а.
Пока клиент и сервер выполняют процедуру handshake сообщение so_4::rt::comm::msg_client_connected не рассылается. Т.е. на уровне SObjectizer-а соединение считается еще не установленным. На стороне клиента сообщение so_4::rt::comm::msg_client_connected отсылается после того, как клиент отошлет на сервер сообщение о своем SOP-фильтре. На стороне сервера сообщение so_4::rt::comm::msg_client_connected отсылается после того, как сервер получит сообщение о SOP-фильтре клиента.
В SObjectizer-е версии 4.2.7 реализован только один транформатор, который осуществляет компрессию с использованием библиотеки zlib (http://www.zlib.org). Но, трансформаторы позволяют в будущих версиях реализовать, например:
Для сообщений процедуры handshake (so_4::sop::handshake_info_t, so_4::sop::handshake_resp_info_t) применены возможности ObjESSty v.1.2.0 по поддержке расширяемости сериализуемых типов. То, что типы so_4::sop::handshake_info_t, so_4::sop::handshake_resp_info_t являются расширяемыми, позволяет в будущих версиях SObjectizer-а передавать в процедуре handshake дополнительную информацию. Например, для выбора алгоритма криптографической подписи, для передачи аутентификационной информации, для выбора более оптимальных способов ObjESSty-сериализации и т.д.
Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:48 2008. Создано системой 1.5.6 |