@parasit32

Как работать с NIO?

Пытаюсь погрузиться в NIO, но от прочитанных статей в голове каша.
Как идентифицировать клиента, который уже отправлял серверу данные? Существует ли уже готовая реализация сессии? Как можно сделать так, чтобы сервер мог отправить клиенту данные в любой момент? Стоит ли создавать несколько тредов-обработчиков или NIO рассчитан на один? Есть ли пример какого-нибудь полностью рабочего сервиса, в котором можно посмотреть на то, как реализованы запросы разных действий клиентами, сериализация и всё остальное? Есть ли вообще какой-нибудь понятный мануал/учебник/курс, в котором объяснены как основы, так и неочевидные с первого взгляда вещи? В тех статьях, которые видел я, были только простые сниппеты и объяснение в двух словах, какой объект за что отвечает, но как это должно работать всё вместе и в настоящей системе, я так и не понял.
  • Вопрос задан
  • 374 просмотра
Пригласить эксперта
Ответы на вопрос 1
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
Очень обширный вопрос и ответ такого объема врядли найдете.
Могу только предложить такой вариант. Попробуйте написать свой чат постепенно его усложняя.
Для примера. Есть некий класс user в котором есть поля ip_addres\username.
Есть некий абстрактный класс packet в нем есть поля pack_num, byte_data. Так же есть наследник pack_message у которого есть новое поле message. И pack_auth с полем username.
pack_num = уникальный номер пакета чтобы понимать во что надо сериализовать или десериализовать.
byte_data = байтовое представление содержимого пакета.
Дальше пишете(или берете сниппет) сервера\клиента. Сервер ждет данные, клиент присылает пакет pack_auth со своим username, сервер создает поток и экземпляр user в которой вносит полученные данные. Дальше клиент и сервер могут меняться такими своими пакетами pack_message.
Когда наиграетесь то усложняйте задачу, введите новый тип пакета бродкаст, комнаты, оповещение о доставке сообщения, состояние пользователей и т.д. постоянно усложняя задачу. В конечном счете будете понимать как это все работает а в частности сможете брать новую тему с челенджем для себя и реализовывать ее.
Я лично только после такого смог более или менее разобраться с nio, а чат просто потому что это не так сложно, интересно и охватывает очень многие темы работы с nio. Еще кстати заодно и заюзал eventbus из либы guava для событийно ориентированного кода а позже написал свою версию библиотеки для событий и наживую вкинул в чат.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы