Java. Программирование на сокетах. Best practics

В 8-ом издании (для любопытствующих могу проверить в 7-ом издание, слишком давно читал его) 2-ого тома книги Хорстманна о J2SE - упоминается лучшая практика по программированию многопоточного сокет-сервера, с применением пакета неблокирующего чтения средствами пакета nio.

К сожалению - материал на английском, на сайте IBM.

Материал очень хорошо оформлен, есть поясняющие UML-диаграммы, показывающие зависимости используемых интерфейсов.

Можно скачать пример с кодом (чуть-чуть его придется подпилить, в сущих пустяках, которые покажет вам, например, IDE Eclipse - просто чтобы не показывались warnings, кто любит "чистоту и порядок" - материал статьи и пример кода - за 2002 г., но это - мелочи).

Да, там в ведении к статье - расскажут, что принцип похож, в чем-то - на одну особенность программирования GUI в Windows.

Не пугайтесь, сейчас все расскажу. :) В Windows, после инициализации окна приложения, в которое вы хотите поместить контроллы (элементы управления) - используется следующая схема - операционная система направляет все события для этого окна - в компонент этого окна, причем события (сворачивания окна, например) - идут "очередью" и ваша задача - "присосаться" к этой очереди и отбирать нужные вам события (обрабатывать их).

Примерно по такому же принципу построено и данное решение программирования многопоточного сокет-сервера. Дело в том, что используя только одну многопоточность - вы будете блокироваться на входящем потоке сообщений, поступающих на ваш сокет-сервер. Пакет же nio - позволит вам установить неблокирующую обработку этих сообщений (а так же прерывание других, параллельных потоков обработки, обслуживающих подключения других клиентов к этому сокет-серверу).

Под конец объяснения в этой статье - становится не совсем понятно. И даже пример с кодом - может вас не раз заставить почесать вашу (умную) головушку. На мой взгляд здесь объяснение такое - часть решения - инкапсулировано в пакете nio. Поэтому вы не видите всех "хвостиков" его.

Но если в двух словах (там еще упоминается паттерн проектирования Reactor) - то объяснение лучшей (или одной из лучших) практик - я вам уже пересказал. :)

0 коммент.:

Отправить комментарий