• Java ( с либами ) против Node.js, что выбрать для вебсервиса?

    @ericcartman Автор вопроса
    InoMono,
    Вообще это идиотизм, в случае сложного проекта решает квалификация конкретного разработчика и конкретная архитектура проекта.

    Нету конкретного разработчика, нету архитектуры. Есть идея бизнеса, деньги и связи инвестора. Остальное - дело техники. Вот это "дело техники" надо быстро решить, начать нанимать Нод-щиков, или Джавистов.
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Александр, ну ок, а в примере выше как? поток же не отдает на откуп ОС, а повиснет сам? Но зато это отдельный поток, и то что он повиснет, другим не повредит потокам. Но зато потоков ограниченное кол-во можно, явно не для задачи о 10К подключениях ( которая в наше время звучит как 50к)
  • Java ( с либами ) против Node.js, что выбрать для вебсервиса?

    @ericcartman Автор вопроса
    Александр Таратин, Ну хорошо, картинка допустим бред, но так или иначе придется ему объяснять, как на джаве сделать не хуже чем на ноде.
    Если нельзя - то делать на Ноде. Если можно - то разрешит делать на Джаве, потому что в дело вступит аргумент, что джавистов больше на рынке, и если что всегда найдем кто продолжит поддерживать продукт
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Сергей Горностаев, Спасибо, понял, изучу Netty
    Один вопрос остался: Netty - это фреймфорк ? Но не сервер ? то есть какой то сервер должен стоять впереди него. Подскажите, любой можно ставить? или только асинхронный? А над Netty хорошо бы Spring 5 и WebFlux ?
  • Java ( с либами ) против Node.js, что выбрать для вебсервиса?

    @ericcartman Автор вопроса
    InoMono, Он не программист, он увидел картинку
    toptal-blog-image-1494484326798-0372c535
    а теперь я должен развенчать миф этой картинки. Либо покориться этой картинке и делать все на ноде ( основы я знаю, остальное команда выучит за пару недель, а кто не выучит, тех заменят на людей с улицы)
  • Java ( с либами ) против Node.js, что выбрать для вебсервиса?

    @ericcartman Автор вопроса
    Александр Таратин, Он не мой клиент, он мой работодятел. Он же инвестор. Короче он хочет понять на пальцах, как на Джаве сделать то же самое, что на Ноде. Можно ли? Если нельзя - то делать на Ноде. Если можно - то разрешит делать на Джаве, потому что в дело вступит аргумент, что джавистов больше на рынке, и если что всегда найдем кто продолжит поддерживать продукт
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Евгений Калибров, да, это уже писали тут:
    @RequestMapping
    public Future<String> get(@RequestParam String input) {
      CompletableFuture<String> future = new CompletableFuture<>();
      return CompletableFuture.supplyAsync(() -> "in the background");
    }

    Просто создает другой поток, а Нода как то отдает все ОС а сама занимается обслуживанием след клиента...

    Че то меня уже терзают смутные сомнения, что проще Ноду выучить, чем разбираться, как на джаве сделать то же самое, может там просто невозможно это...
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Александр,
    Истинно-верный путь на Java не знаю, но с ходу нагуглил это.

    Прочел, но там
    public class AsyncRequestProcessor implements Runnable

    В общем банально в новом потоке, а Нода отдает ОС ( как Вы писали выше)
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Сергей Горностаев, Да, это дельный совет.
    Сначала однопоточный на сокетах
    Done
    Потом сделать его многопоточным
    Done
    Потом переписать в асинхронном варианте с java.nio.channels
    In Progress
    Потом переписать ещё раз на Netty
    To Do
    ---
    Потом вдумчиво изучить Servlet API. Это даст вам базу, чтобы понимать как там все происходит
    Обязательно. Собственно я в посте первом и написал, что все изучу/прочту и наши и буржуйские сайты. Просто хотелось бы сначала на пальцах, чтобы придали мне направление ( и уверенности)
    Вот скажем эта статья: journaldev.com/2008/async-servlet-example
    говориться, что асинхронно, но на деле опять просто поток создается.

    Хотелось бы понять все же, что такое асинхронность Ноды и как сделать на Джаве такое же. Это же не то же самое, что поток запустить просто отдельный? Это отдать задачу ОС и ждать колбек? Или я ошибаюсь?

    Если нетрудно, можно просто инструкцию: "чтобы было как Нода, бери такой-то асинхронный сервер, такой то асинхронный фреймворк и изучай" ( ну или Spring c WebFlux ) то есть я очень хочу изучить этот вопрос, прям не могу ))) просто хотелось бы знать, что я двигаюсь в правильном направлении.
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Александр,
    ну, мы тут стараемся для ТСа, а ему это, судя по вопросу, далеко не разумеющееся =(

    Я очень благодарен вам, ребята, спасибо! Nginx нужен для отдачи статики в основном, так? Ну пусть так. И все же, как на Java технологиях сделать то же самое, что делает Node? уверен, это возможно.
    В ноде есть асинхронный сервер говорите? Ну хорошо, значит берем асинхронный сервер заточенный под Java: Jetty? jooby? Дальше что? Spring можно юзать? или это все синхронно, и максимум чего можно там добиться, это запуститься в отдельном потоке
    @RequestMapping
    public Future<String> get(@RequestParam String input) {
      CompletableFuture<String> future = new CompletableFuture<>();
      return CompletableFuture.supplyAsync(() -> "in the background");

    Это говорят не является асинхронным вызовом? А просто в отдельном потоке запускает?
    ну а WebFlux - асинхронно?
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Ерлан Ибраев,
    SpringBoot может выступать как сервером приложений (монолит)

    Мне казалось, что SpringBoot - это просто надстройка над Spring, уже содержащая необходимые библиотеки, чтобы можно было в 1 строчку написать сервис. Заодно там встроен и Tomcat, то есть сервер там Tomcat, просто запускается автоматом
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Александр, Получается, нода из коробки умеет
    приостановить текущее задание и перейти к другому, пока из очереди не получен ответ. Причем, не только какие-то там абстрактные очереди, даже сама ос может работать асинхронно. Т.е. ос уведомляет нас (вызовом callback), когда в сокет пришел ответ/прочитан файл. Из этого коллбека мы определяем для какого запроса пришли данные и продолжаем выполнять тот запрос.

    Но минус ее в том, что там 1 поток, т.е. если проц 8 ядерный, то 7 ядер будут простаивать?
    А вот tomcat допустим создаст 8 потоков, и утилизирует все 8 ядер, но зато каждый из этих 8 потоков придется самому научить быть асинхронным, т.е. сбагривать таски ОС а самому освобождаться. Так?
    Скажем ставлю tomcat + spring и обрабатываю рест-запросы так:
    @RequestMapping
    public Future<String> get(@RequestParam String input) {
      CompletableFuture<String> future = new CompletableFuture<>();
      return CompletableFuture.supplyAsync(() -> "in the background");
    }

    Таким образом, у меня пул асинхронных воркеров, так? или все же есть где-то синхронность?
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Сергей Горностаев,
    Ну вот вроде синхронность спринга побеждаю таким образом:
    @RequestMapping
    public Future<String> get(@RequestParam String input) {
      CompletableFuture<String> future = new CompletableFuture<>();
      return CompletableFuture.supplyAsync(() -> "in the background");
    }

    Нормально?
    Вместо томката что посоветуете? Jetty? Undertow?
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Сергей Горностаев, Согласен, я не знаю как устроено все на сервере. Но скажем простейший сервер я и сам написать могу. Просто прогу которая слушает сокет и обрабатывает запрос, пишет ответ. К сожалению, это мало помогает, поскольку уже все давно написано, надо просто знать как устроено и что там под капотом, не всмысле кода, а просто как и что происходит.
    Ну вот получается простейший веб-рест-сервис я делаю так: ставлю томкэт, спринг. В методе, который отвечает за обработку запроса ( @RequestMapping) делаю запрос к базе. Все висит в это время. Я понимаю, что этот метод запускается в отдельном потоке сервером ( да?) но он подвис теперь. Как превратить это в асинхронный?
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Запрос от юзера все же приходит к серверу. И сервер его обслуживает, при помощи всяких сторонних программ, написанных на Java, на Ноде и тп. Это разве неверно?
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    ничто не мешает на Java/C/C#/Go/Python/даже, при большом желании, на php написать приложение, которое будет обрабатывать пользовательские запросы точно так же

    Это хорошо! Тогда подскажите, вот Апач берет запрос, выделяет на него воркер ( это просто поток?) и этот поток пошел к базе данных и повис на тяжелом запросе. А чтобы было асинхронно, этот поток должен был закинуть запрос куда-то в очередь ( ну скажем к шине Кафка), а самому вернуться в пул воркеров, так?
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Пользователь. Веб сервера обслуживают запросы от пользователей. При попытке посмотреть, например, эту страницу, ваш браузер отправляет веб-серверу запрос

    Нет, я имел ввиду, запрос к базе, который будем считать тяжеловесным. Кому нода его сбагривает, чтобы самой вернуться к обслуживанию запросов сервера?
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    делая и пул потоков и работая в асинхронном режиме.

    Подскажите, как это сделать на Java? Ну просто пример, допустим такой: Nginx + Apache + Spring 5 ( c WebFlux , Netty) + Akka + PostgreSQL - так пойдет? Будет асинхронно? или все же пул потоков, созданный Apache уже фейл?
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Зато, если какой обработчик пытается сделать блокирующую операцию - виснут все остальные обработчики
    Почему? обработчики = потоки, да? Почему если один поток застрял на тяжелой операции, остальные тоже повисли? С чего бы?
  • Асинхронность Node.js против Java, в чем подвох?

    @ericcartman Автор вопроса
    Вот хорошая статья которая объясняет в чём заключается асинхронность в nodeJS

    Спасибо, прочел. Возникли доп вопросы:
    Там сравнивается с PHP, а изначально тут речь шла про Java, как все таки с ней быть? В статье указано:
    Event loop регистрирует операцию в пуле потоков с нужным коллбеком.
    То есть то же самое, что у Apache? Пул потоков, и каждый уже может повиснуть при тяжелом запросе. Да?
    И второе: сервер ,встроенный в Node, чем он лучше Apache + Nginx ?