Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
1

Несколько серверов в одной программе

03.03.2017, 21:20. Показов 3346. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Гуру, подскажите, Spring на такое способен?

Задумка:
сервер на :8000 для клиентов (обычный http://)
сервер на :9000 для админки и отладки - включается по надобности и может быть легко отрезоано фаерволом внешним сетям
сервер с socket.io (обычный сокет)
сервер с https:// как закрытое зеркало для 8000, авторизация, закрытые данные, возможно телеграмм бот и отдельные сервисы

Основная мысль - все эти "каналы" связаны, и работают с общими данными. Не хочется их "нарезать на программы" и придумывать механизмы общения этих программ.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2017, 21:20
Ответы с готовыми решениями:

Как прописать 12 if-ов в одной программе ?
Всем привет!) Знаю что if это зло, но другого пути у меня нет. Задача состоит в том что бы когда...

MVC, несколько моделей на одной view
Всем привет! Столкнулся с такой проблемой. Делаю веб-приложение - что-то типа веб-интерфейса для...

Несколько серверов на одной машине
Всем привет. Ранее работал только с одним сервером и одной БД. Хочу поучиться и запустить...

Несколько серверов на одной машине
Привет всем. Есть вопрос: При установке нескольких серверов (2) на одну машину, какие затыки...

17
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.03.2017, 22:51 2
Tester64, если не хочется "нарезать", пишите все на одном порту и админку делайте на /admin. Зачем вам сокеты?
Вот тут такое вроде делают, но как по мне это извращение то ещё
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
04.03.2017, 00:38  [ТС] 3
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
если не хочется "нарезать", пишите все на одном порту
а на нескольких никак нельзя??? теоретически для любого сайта является нормой если на сервере сидит http сервер с основным сайтом, его защищенная версия https (хотя-бы для "личного кабинета" и авторизации, или даже только для json запросов если ключи не купил и не хочешь видеть "сайт с небезопасной подписью") и пуш-уведомления (что может быть логичнее сокет-сервера). Если от второго порта для сайта еще можно отказаться (фаервол должен будет полный путь к админке ловить), то http+https+socket просто должны быть в одной программе ("пространство имен", общая память, общее соединение с базой, система общих потоков, общий кэш в памяти и т.д.).

В РНР можно было общий сайт(папку скриптов) натравить на 2 сайта (http+https). В node тоже вроде в одном скрипте можно много "серверов" поднять разного типа с общими глобальными переменными. В спринге не смог нагуглить... порты менять могу, но только один. А томкэт (в Вашей ссылке) похоже просто выполняет роль переадресатора/фаервола.

Ладно... как бы Вы "нарезали" подобную программу на Spring? Чтобы не сильно потерять скорость и функционал. (я так понимаю что придется уже "межпрограмные" протоколы использовать - например обмен json)
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.03.2017, 01:17 4
Цитата Сообщение от Tester64 Посмотреть сообщение
а на нескольких никак нельзя???
вы не совсем понимаете о чем говорите. Варник деплоится в контейнер сервлетов. А контейнер случает порт, один порт.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
04.03.2017, 02:13 5
Цитата Сообщение от Tester64 Посмотреть сообщение
что может быть логичнее сокет-сервера
Вебсокет, вообще-то.

Цитата Сообщение от Tester64 Посмотреть сообщение
http+https+socket просто должны быть в одной программе
Это делается через nginx proxy, а сидящий за ним веб-сервак просто слушает один порт.

Цитата Сообщение от Tester64 Посмотреть сообщение
просто должны быть в одной программе ("пространство имен", общая память, общее соединение с базой, система общих потоков, общий кэш в памяти и т.д.).
Долой масштабирование! Долой отказоустойчивость! Долой распределённость! Да?

Цитата Сообщение от Tester64 Посмотреть сообщение
теоретически для любого сайта является нормой если на сервере сидит http сервер с основным сайтом, его защищенная версия https (хотя-бы для "личного кабинета" и авторизации, или даже только для json запросов если ключи не купил и не хочешь видеть "сайт с небезопасной подписью")
Для любого сайта является нормой наличие подтверждённого сертификата и перенаправление всех http-запросов на https.

Цитата Сообщение от neske Посмотреть сообщение
контейнер сервлетов
Это тут при чём?

Добавлено через 2 минуты

Не по теме:

Вот что бывает, когда PHP/JS-кодеры дорываются до бэк-энда…

0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
04.03.2017, 02:44  [ТС] 6
Цитата Сообщение от korvin_ Посмотреть сообщение
Долой масштабирование! Долой отказоустойчивость! Долой распределённость! Да?
для небольшого сайта в 5-6 страниц на пару сотен посетителей в день - вполне... Прошел авторизцию, получил ключ, открыл сокет, создал сессию для страницы, подсчитал кэш под пользователя и держишь в памяти (а не в базе) пару list/Map, тут-же шлешь по сокету "вам письмо" или сообщения в чат, или в телеграмм, или динамически перерисовываешь график курсов без постоянного опроса сервера... А распределенность - в лучшем случае 2-8 ядер на одном сервере и памяти побольше для ускорения математических обработок. Не нужно сразу мечтать повторить твитер или фейсбук на небольшой ферме серверов в тысячу стоек! Прийдет время - перепишу!

Ну если никак... тогда подскажите какими техниками java проэкты могут "общаться" друг с другом? Что гуглить? И как подобное на сервере выглядит - основной проект и подчиненные или блоки загружаемые списком и "обнаруживающие" друг-дружку? Это делается той-же командой java...jar/war или нужен сервер вроде томкэта?

Не по теме:

Цитата Сообщение от korvin_ Посмотреть сообщение
Вот что бывает, когда PHP/JS-кодеры дорываются до бэк-энда…
я не был веб-программистом! написал пару закрытых апи-серверов для андроида на PНР, работал с апачем/nginx. А теперь решил переписать тот-же проект на java - минисайт(практически раздача статик-папки + десяток json с отчетами), работа с закачкой/скачиванием файлов пользователей и система уведомления о наличии обновлений через пуши и/или сокеты. А опыт как известно - дело наживное!

0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
04.03.2017, 03:27 7
Цитата Сообщение от Tester64 Посмотреть сообщение
подсчитал кэш под пользователя и держишь в памяти (а не в базе) пару list/Map
А потом сервак упал, и все подсчёты вылетели в трубу? А уж обеспечивать непротиворечивость состояния «общей памяти» при доступе из нескольких потоков — то ещё удовольствие.

Цитата Сообщение от Tester64 Посмотреть сообщение
я не был веб-программистом! написал пару закрытых апи-серверов для андроида на PНР, работал с апачем/nginx.
Взаимоисключающие параграфы.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
04.03.2017, 09:34 8
Tester64, вы упорно пытаетесь впихнуть в джаву методологии пхп. Не стоит этого делать. На джаве нужно использовать подходы, которые вам написали выше. С одной стороны вы говорите "простой сайт на пару страниц", с другой городите тут какую то несуразную архитетуру.

Для пары сотен пользователей можете в БД хранить вообще что угодно и кеш не использовать. Все эти оптимизации если и будут нужны вам, то позже.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
04.03.2017, 12:43  [ТС] 9
Цитата Сообщение от korvin_ Посмотреть сообщение
Взаимоисключающие параграфы.
ничуть! 2 простых апи под php+apach это еще не "веб программист"! и основная начинка "безопасности файлов" на серверах апач/нжиникс а не на РНР. А в андроиде 3 года один проект "пилил" на java. Спринг мне намного ближе php, просто не понимаю почему столько ограничений. В nginx один и тот-же скрипт легко "пускался" и на http и на https. В ноде поднимал 2 порта в одном маленьком скрипте с 2мя разными страницами и с сокет чатом.

Цитата Сообщение от korvin_ Посмотреть сообщение
А потом сервак упал, и все подсчёты вылетели в трубу?
Кэш разным бывает. Например запрос по 5 таблицам в маленкий List "параметров" и "уровней доступа" по текущему авторизированному пользователю подключившемуся и к сокету и открывшему сессию. Пара байт кода полученная 3мя запросами к базе. Читают все "сервисы" (сессия + сокет) и знают что можно давать этому юзеру, а что скрыть. На 3 сервера (http, https, socket.io) одна запись в общей памяти.

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
вы упорно пытаетесь впихнуть в джаву методологии пхп. Не стоит этого делать.
Это все конечно круто. Но КАК?

Ну если никак... тогда подскажите какими техниками java проэкты могут "общаться" друг с другом? Что гуглить? И как подобное на сервере выглядит - основной проект и подчиненные или блоки загружаемые списком и "обнаруживающие" друг-дружку? Это делается той-же командой java...jar/war или нужен сервер вроде томкэта?
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
04.03.2017, 13:11 10
Tester64, у вас каша в голове. Не нужно вам несколько проетэктов. Нужен только один. Jar это тот же томкэт только встроенный. Если очень хочется мудрить гуглите micro services architecture. Однако еще раз скажу это не для вашего случая.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
04.03.2017, 21:41  [ТС] 11
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Если очень хочется мудрить
Да не хочется мне мудрить! мне нужно 3 "связанных" сервера в одном проекте!
Хочешь заходишь на http хочешь на https. Что-то доступно только на https. Еще мой сервер(сайт) предоставляет сокет сервер для чата и пуш уведомления о новых сообщениях. Добавляешь "рассылку"/"новость" через http/https, а сокет нужным людям шлет сообщение для показа в маленькой иконке в уголке страницы ("непрочитанные новости"). В идеале не один сервер заносит "заказ" в базу, а другой ("сокетный") находит время чтобы их прочитать и разослать а почти мгновенно - через долю секунды - получив прямой приказ от сервера "начни рассылку", а не чтение "заявки".

Итог - ныжны сервер http, https и сокет! в идеале запасной http для админки на другом порте. можно 3-4 программы, можно в одной (не знаю как). Если 3 то дожно быть "тесное" общение программ. Это ТОЧНО микросервисы? Пожалуйста не пускайте меня по "ложному следу".

Микросервис может быть полноценным веб сервером? а сокет сервером? Нашел кучу статей на тему "стоит или нет использовать микросервисы и как нарезать монолитную программу на сервисы". Но ведь похоже в "монолите" изначально запрещено 2 порта и http+socket.io.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
04.03.2017, 22:47 12
Я устал пытаться донести до вас информацию. Вы похоже не способны её воспринимать. Хотите делать 3 сервера, делайте хоть 10. Я написал что вам достаточно одного. По сто раз повторять одно и тоже желания нет. Удачи.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
04.03.2017, 23:34  [ТС] 13
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Я устал пытаться донести до вас информацию. Вы похоже не способны её воспринимать. Хотите делать 3 сервера, делайте хоть 10. Я написал что вам достаточно одного. По сто раз повторять одно и тоже желания нет. Удачи.
ГДЕ вы это описали???? я не нашел/нагуглил ни одного примера с поддержкой двух портов, http/https и socket.io в одном проекте! По 2 порта вообще все советуют через Томкэт "настроить маршрутизацию" и похоже там просто "зеркало" на выходе получают, а не 2 независимых сервера с разными наборами страниц.

Может мы говорим на разных терминах??? Сервер - ПРОГРАММА обрабатывающая порт по протоколу, а не отдельный компьютер. Вопрос лишь в том что все это должно быть в одном проекте и хитро настроено или 3 проекта, которые надо как-то связать и запустить одновременно? Или это 3 проекта которые надо собрать в единый jar/war файл?

Перечитайте первое сообщение и ответьте на него, а не "пытайтесь доносить информацию". Возможно ли все перечисленное удержать/настроить в ОДНОМ проекте спринга или их надо "нарезать ради надежности и масштабирования". и не надо убеждать меня что сокет мне не нужен! это ТЗ от заказчика! Сокет для чата и пуш уведомлений в открытые страницы о "новостях для текущего клиента" без ежесекундных опросов сервера (на ноде такое писал - успешно работало - теперь надо на спринге).
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
05.03.2017, 00:45 14
Цитата Сообщение от Tester64 Посмотреть сообщение
я не нашел/нагуглил ни одного примера с поддержкой двух портов, http/https и socket.io в одном проекте!
вы бы сразу ваше ТЗ гуглили...вдруг кто-нибудь его уже написал...

Цитата Сообщение от Tester64 Посмотреть сообщение
нарезать ради надежности
создав микросервисы вы в вашем случае не получите надежности. Получите только головную боль. Масштабирование вам не нужно при паре сотен (даже паре тысяч) пользователей

Цитата Сообщение от Tester64 Посмотреть сообщение
не надо убеждать меня что сокет мне не нужен!
я и не убеждаю. Спринг бут вполне поддерживает веб сокет. Гуглится за секунду (https://spring.io/guides/gs/me... websocket/)

Два порта вам точно ненужно. Веб сайты сидят на 80 порту. Админка просто вешается на /admin
Тоже самое с http/https. Если вам нужен https, делайте его на весь свой сайт.
Всякие там "отрезания" частей сайта (тоже непонятно зачем вам нужно) решаются как писали выше через nginx или apache httpd
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
05.03.2017, 02:40  [ТС] 15
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
вы бы сразу ваше ТЗ гуглили...вдруг кто-нибудь его уже написал...
Я озвучил в первом посте ТЗ! Оно не гуглится! а по частям похоже идут "конфликты". Поэтому и решил спросить у тех кто в теме спринга больше 3й недели...

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Спринг бут вполне поддерживает веб сокет.
вопрос не в "поддерживает или нет". Вопрос в том можно ли ОДНОВРЕМЕННО в одном проекте держать http,https и сокет!(а если нет, то как это совместить) Гуглил как "ПЕРЕКЛЮЧИТЬ/перевести" сайт с http на https - не одновременно, а именно "или или". Гуглил как к ПУСТОМУ проекту подключить socket.io - не одновременно с обычными страницами json/html, а именно "чисто для сокет чата". Гуглил как сменить рабочий порт для http - не запустить/открыть 2й веб-сервер в программе с другим набором контроллеров, а именно "просто сменить". В ноде это делается в 2-3 страницы кода (2 http на разные порты + сокет-сервер). В спринге даже близко нагуглить не могу как это делается ОДНОВРЕМЕННО. Да и здесь половина коментов от "зачем тебе это - одновременно никто не делает"(забей на ТЗ?), до "Долой масштабирование! Долой отказоустойчивость! Долой распределённость! Да?"(есть хилый хостинг и десяток посетителей, но вложи запас мощности сразу на гугл-аудиторию).

Неужели эту задачу на ЧИСТОМ спринге не решить???? Без томкэта или nginx для нарезки доступов и "танцев с бубном" вокруг портов? Ответьте ДА или НЕТ! Чтобы я не тратил недели на то как это все-таки сделать стандартными средствами спринга и не удивлялся что работает "либо-либо"!
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
05.03.2017, 10:06 16
Лучший ответ Сообщение было отмечено Tester64 как решение

Решение

Чистый спринг ничего не знает про http/https и порты. Если ты говоришь про spring boot, то так и пиши - а то глаза режет.
Про одновременно: внутри spring boot есть встроенный сервер. Чтобы одновременно был запуск на нескольких портах, надо создать свой листенер. К примеру в пункте 73.9 как поднять два коннектора разом. Веб-сокеты работают через эти же коннекторы.
1
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
05.03.2017, 10:09 17
Tester64, хватит истерить уже. Вы по ссылкам ходили которые я давал?
Насчет чистого спринга выше сказали. Спринг это фреймворк а не сервер.

Цитата Сообщение от Tester64 Посмотреть сообщение
Ответьте ДА или НЕТ!
да, но предполагает что у вас есть опыт разработки на джава и опыт использования спринга. У вас его нет поэтому лучше пишите на ноде.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
05.03.2017, 19:10  [ТС] 18
Цитата Сообщение от KuKu Посмотреть сообщение
Чистый спринг ничего не знает про http/https и порты. Если ты говоришь про spring boot, то так и пиши - а то глаза режет.
Спасибо! Для меня спринг был "полным комплексом" инструментов для создания (в то числе) сайта со встроенным в ядро сервером. я еще не разделяю boot от других.
Думаю хватит! Теперь буду вычитывать...

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
>>Ответьте ДА или НЕТ!
да
Это все что мне он вас было нужно!!! зачем остальная "лирика"?

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
да, но предполагает что у вас есть опыт разработки на джава и опыт использования спринга. У вас его нет поэтому лучше пишите на ноде.
ага! шас! "у тебя нет опыта в спринге, поэтому пиши и дальше на паскале, бейсике, 1С или "школьном алгоритмическом"... и вообще не лезь в высокие технологии ведь у тебя нет опыта! и не отвлекай умных дядей глупыми вопросами".
опыт - это дело наживное!!!

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Вы по ссылкам ходили которые я давал?
Конечно ходил! 1) Настройка томкэта чтобы обмануть юзера будто спринг одновременно работает на двух портах. когда мне нужно 2 РАЗНЫХ сервера(с разными контроллерами) запустить из одного проекта(и не говори "зачем тебе это нужно" - ТЗ). 2) куча кода который похоже позволяет ВМЕСТО стандартного сервера использовать WebSocket (мне нужен socket.io), а не одновременно... чтобы протестить это надо потратить новичку несколько дней и судя по описанию я не уверен что не потрачу время впустую!

ВОПРОС ЗАКРЫВАЮ!
0
05.03.2017, 19:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2017, 19:10
Помогаю со студенческими работами здесь

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

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

Несколько алгоритмов сортировки в одной программе
Здравствуйте, форумчане. Подскажите пожалуйста, у меня есть 5 кодов программ. Суть в том, что...

Подскажите, как сделать несколько итераций в одной программе
суть такова: есть формула типа а=f(v,h)нужно, рассчитать несколько итераций по схеме a=f9v,h);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru