Как перенаправить запрос/аплоад картинки на другое приложение локально?
На сервере 2 Node приложения: одно смотрит в мир и получает внешние запросы, второе приложение работает локально, на другом порту.
Я хочу при загрузке картинке не обрабатывать ее первым приложением, а редиректить во второе, локально, а потом по завершении получать результат и отдавать клиенту.
На первом приложении обычный сервер Express. На втором Express + Multer.
Как это реализовывать? На ум приходит только локальный запрос на другой порт где второе приложение, например через request или axios, но будет ли это эффективно? И что передавать - полностью как-то весь запрос, или буфер с картинкой? Нужен ли мне Multer в первом приложении?
Роман: Хотелось бы услышать для чего Вам такие сложности? Это позволило бы ограничить варианты решений. А так, могу предложить лишь общую концепцию. Если Вы хотите вынести код обработки изображения (не записи его на диск, а что-то более тяжелое, например обрезка, изменение размеров и тому подобное) то да, неплохо бы вынести эти операции в отдельный процесс. Один из способов, тот что предложили Вы. Но я бы сделал несколько иначе Worker Threads | Node.js v11.6.0 Documentation, если же Вы в будущем планируете производить эти операции вообще на другой машине, то остается только предложенный Вами вариант или Cluster | Node.js v11.6.0 Documentation
hckn: Именно так. Происходит изменение размеров (минимум 5 разрешений), оптимизация, конвертация в webp, добавление эффектов. В идеале в будущем вообще вынесу на отдельный сервер, но сначала хочу сделать локально в отдельных приложениях. Помимо того что распределение нагрузки, еще есть зависимости в которых не уверен, поэтому надежней их вынести отдельно в приложение, не касающееся бизнес логики. У меня есть вопрос по предложенному мной варианту. Я честно говоря так не делал никогда, знаю только в теории. Как именно мне передать сами данные (картинку или видео) из первичного запроса? Мне же получается в первом приложении нужно обработать данные из тела запроса (типо, названия картинки и другие), отдать картинку/видео на конвертацию второму приложению, дождаться от него результата операции с ответом (с метаданными, типа размеров изображения, вибранта цвета и тд), сохранить все в бд и вернуть ответ клиенту в рамках одного запроса (т.е. никаких отложенных очередей и тд). Как передать этот буфер правильно?
Роман: Абсолютно без разницы, хоть в base64, самое главное обеспечить передачу данных без внесения ошибок в данные, а далее, в зависимости от выбранного способа передачи обеспечить преобразование переданного массива данных в формат, с которым умеет работать ваше второе приложение. Для того чтобы избежать лишних нагрузок на преобразование форматов, в первом приложении сделал бы прямую трансляцию поступающих данных об изображении на второй сервис, а всю логику по обработке и формированию формализованного пакета данных реализовал бы в нем. Если бы решал такую задачу для себя, сделал бы отправку данных сразу на второе приложение, а в первом повесил через вебсокеты связь со вторым по которой передавал результаты. Это немного нарушает линейность последовательности обработки и усложняет структуру приложения, но также и снижает нагрузку на основной сервис