9

Java Simple Server для микросервисов?1

Серия Java Simple Server

Главное помни - эта либа не подойдёт для разработки сложной бизнес логики.
©Я

Возможно кому-то, кроме меня, пригодится такая реализация java сервера. Это opensource библиотека, распространяемая по лицензии Apache (возможно стоит сменить лицензию?), которая была создана в тот момент, когда стало понятно, что я раз за разом использую один и тот же код. Базируется эта либа на com.sun.net.httpserver и доступна в Maven Central.

Запустим сервер!

Довольно просто и быстро. Сервер запускается на указанном порту и создает thread executor с пулом потоков равным количеству потоков процессора. При запуске вешает родительский поток в ожидание на две секунды. В stdout плюнет вот такое:

Теперь можно проверить работает ли сервер. Делается предельно просто. Открыть браузер и стукнуть по адресу http://localhost:8080/alife. В ответ придет текст life. (Думаю всем понятно, что GET запрос можно не только браузером сделать).

Добавим endpoint!
Main.java

Hello.java

После запуска, в stdout плюнет

Это был пример создания конечной точки с методом GET. С методом POST создается схожим образом.
Для всего остального есть мастеркард HttpHandler. Почему так? Ну мне другое пока не особо нужно, вот и не добавил. По той же причине ответы принимают String (я в основном с json работаю).

Короче кому надо - юзайте на здоровье. Кто хочет помочь - прошу на GitHub проекта. Есть пожелания - пишите тут или в issue на гите.

P.S.
Попытка попасть на habr

Лига программистов

2.3K постов12K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Вы смотрите срез комментариев. Показать все
3
Автор поста оценил этот комментарий

"При запуске вешает родительский поток..."


Вот после этого на секундочку страшно стало))

раскрыть ветку (8)
2
Автор поста оценил этот комментарий
Это необходимо, чтобы успел завестись сервер. В данном случае стоит в отдельном потоке начать запуск сервера и подключение к нему эндпоинтов. Хотя может есть другие предложения?)
раскрыть ветку (7)
5
Автор поста оценил этот комментарий

Эээ... а чего бы не создать экземпляр сервера в конструкторе потока, чтобы сразу был доступен объект для навешивания эндпоинтов, а потом уже пусть открывает сокет сколько влезет?

А если порт занят/недоступен текущему юзеру?
А если мне нужно вернуть клиенту ответ не 200?
А если мне нужно какой-то заголовок вернуть?
А если я хочу DELETE?
А если клиент спросит HEAD?
А если я хочу передать в POST QUERY-параметры?
А если клиент мне octet-stream пришлет на двадцать два гигабайта, как я это буду из стринги выковыривать буду(хотя поставим вопрос по другому - как я узнаю, что поток от этого по OOM упал)?
А если я хочу почитать логи?
А как этот сервер выключить?

Без обид, но для заявленной версии 1.5 это чрезвычайно сыро и малофункционально, статический роутинг и отсутствие хотя бы зачатков MVC в 2023 году - ну такое себе. Приемлемо как учебный проект, для продакшена даже в виде сервера под кроватью - категорически противопоказано.

Вот навскидку проект 10-летней давности, умеющий динамические роуты, какую-никакую обработку ошибок и поддерживающий все актуальные методы.

https://github.com/storytellersoftware/java-httpserver/tree/...

раскрыть ветку (2)
1
Автор поста оценил этот комментарий
И да, спасибо за развернутый комментарий!
1
Автор поста оценил этот комментарий
Да, да и еще раз да, но.
В этом случае Вы возьмёте например Spring))

А моя писанина вполне подходит для быстрого поднятия пары простеньких эндпоинтов без необходимости втаскивать в проект целый фремворк. И в моей практике есть моменты, где всего пару тройку эндпоинтов-то и надо)
3
Автор поста оценил этот комментарий

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


Это чисто лайтовый троллинг.) Триггернула страшно звучащая фраза.))

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Так я не в обиде))
Просто комментарий для тех, кто может испугаться по настоящему)
1
Автор поста оценил этот комментарий

А что, если железо слабенькое и двух секунд будет не достаточно?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
В этом случае можно самостоятельно добавить задержку потока. А так я буду добавлять в либу возможность указать время задержки и размер пула потоков сервтера.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества