Задать вопрос
mitaichik
@mitaichik

Как правильно организовать работу с сокетами?

Всем привет! В java новичек, возможно ламмерский вопрос:

Есть java приложение (демон, java 8), оно должно принимать запросы от других приложений, и отдавать им ответы. Решил организовать это на сокетах.

Макс. кол-во одновременных запросов 1000 (это с запасом, в реальность будет около 300)
Время выполнения запроса ~ 0.2сек
Размер данных запроса ~ 100 байт
Размер ответа ~4Кб

Думал сделать по простому - с помощью ServerSocket + ThreadPool, но когда начал углубляться в тему, увидел что это уже не круто, что нужно юзать NIO, Netty. Для меня это все ново, я с сокетами еще никогда не работал.

Подскажите как правильно сделать?

Плюс, сейчас в приложении чистая Java, но в дальнейшем буду заворачивать его в Spring. Может там уже есть что-то готовое и имеет смысл сразу работать с сокетами с помощью Spring'a?

Заранее спасибо!

UPDATE

Это не веб приложение, это просто демон, который не доступен извне. Его клиенты - это, php( как демоны, так и php-fpm процессы) и несколько других java/c++ приложений, запущенных на той же машине (да, у нас тут зоопарк ;)
  • Вопрос задан
  • 226 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
mitaichik
@mitaichik Автор вопроса
В общем, потестировал я ServerSocket со своими параметрами (посылал 100 байт текста, выводил его в консоль, отдавал 4Кб). На рабочем компе получилось что такой вариант способен обработать ~ 70 тыс запросов в секунду. С учетом того, что сервер куда более мощьный чем рабочий комп, этот результат более чем удовлетворителен.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
посмотрите на Spring Web Reactive - подойдёт?
Ответ написан
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
Правильно будет как лично Вам удобнее.
От себя могу порекомендовать мину, у нее есть весьма классный Codec Filter для удобства работы чтобы избавиться от рутины с байтами.
Ответ написан
@ruslanys
ServerSocket + ThreadPool - классическая модель обработки соединений. Попробуйте Netty. Его очень просто подружить с тем же Spring. Netty использует Java NIO, но Вам не придется руками разрешать вопросы с каналами и буферами. Java NIO использует неблокируемую (асинхронную) модель обработки соединений и сообщений, что качественно выведет Ваше приложение на другой уровень.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы