Всем привет! В java новичек, возможно ламмерский вопрос:
Есть java приложение (демон, java 8), оно должно принимать запросы от других приложений, и отдавать им ответы. Решил организовать это на сокетах.
Макс. кол-во одновременных запросов 1000 (это с запасом, в реальность будет около 300)
Время выполнения запроса ~ 0.2сек
Размер данных запроса ~ 100 байт
Размер ответа ~4Кб
Думал сделать по простому - с помощью ServerSocket + ThreadPool, но когда начал углубляться в тему, увидел что это уже не круто, что нужно юзать NIO, Netty. Для меня это все ново, я с сокетами еще никогда не работал.
Подскажите как правильно сделать?
Плюс, сейчас в приложении чистая Java, но в дальнейшем буду заворачивать его в Spring. Может там уже есть что-то готовое и имеет смысл сразу работать с сокетами с помощью Spring'a?
Заранее спасибо!
UPDATE
Это не веб приложение, это просто демон, который не доступен извне. Его клиенты - это, php( как демоны, так и php-fpm процессы) и несколько других java/c++ приложений, запущенных на той же машине (да, у нас тут зоопарк ;)
В общем, потестировал я ServerSocket со своими параметрами (посылал 100 байт текста, выводил его в консоль, отдавал 4Кб). На рабочем компе получилось что такой вариант способен обработать ~ 70 тыс запросов в секунду. С учетом того, что сервер куда более мощьный чем рабочий комп, этот результат более чем удовлетворителен.
Правильно будет как лично Вам удобнее.
От себя могу порекомендовать мину, у нее есть весьма классный Codec Filter для удобства работы чтобы избавиться от рутины с байтами.
ServerSocket + ThreadPool - классическая модель обработки соединений. Попробуйте Netty. Его очень просто подружить с тем же Spring. Netty использует Java NIO, но Вам не придется руками разрешать вопросы с каналами и буферами. Java NIO использует неблокируемую (асинхронную) модель обработки соединений и сообщений, что качественно выведет Ваше приложение на другой уровень.