пишу плагин для VSCode, а там нода и жс ) Хочу интегрироваться с джава - библиотекой из ноды: вызывать функции с параметрами и получать результаты (типы хоть строки хоть жсон не важно). Как лучше это сделать? Каждый раз запускать дочерний процесс с запуском джарника с аргументами в командной строке - долго и неоптимально. Веб-сервер на джаве поднять и из ноды стучаться в его эндпоинты? Или есть варианты быстрые и попроще?
Если исключить переписывание кода жавы на js - принципиально мало что можно придумать другое. Например, поднять службу/демона, который будет предоставлять api по юникс сокетам - но это звучит диковато. Поднять и держать сервак в сети и всех туда гонять - но тогда для работы плагина нужен инет
А почему диковато? Юниксовые сокеты весьма шустрые, по-моему норм решение. Для обоих языков обвязок достаточно.
Диковатость не в них, а в поднятии службы/демона Юникс сокеты надо использовать и при поднятии веб сервера
Это нормально. Для тайпскрипта тоже сервер поднимается, например.
Поднимать службу там, где можно ограничиться процессом - это диковато, и если ts так делает, то это ещё один лулз
Спасибо. 1. Переписывание кода джавы на жс работает сейчас - и медленно. Именно поэтому и возникла идея дергать джаву напрямую. (Идеи что на жс написано криво и неоптимально имеют право на жизнь, но на самом деле все сложнее - это чужая либа написана на кложе, можно компилировать и в жс и в джаву, так вот компилированная напрямую в жс она тормозит) 2. Апи по юникс сокетам с поднятым демоном кажется именно то что нужно, спасибо, покурю. Единственно что - юзеры плагина на винде расстроятся что у них не будет работать, а делать кроссплатформенное решение мне лень ) 3. Сервак будет не в инете, а подниматься локально, при инициализации плагина, а нода будет стучаться к нему по локалхосту. Вчера это реализовал уже, вроде норм, только бьюсь с передачей сырого текста в боди - оно мне удаляет переводы строк и лишние пробелы, а мне надо как есть
Так а зачем демон то? Почему не поднять просто обычный процесс рядом? Тогда проще будет кроссплатформенность обеспечить, разница будет только в пути к сокетам (у винды там какая-то дичь с /./pipe/...) С демоном тоже можно кроссплатформенно сделать, в Винде это называется служба. Но это запарнее
Честно говоря, я пока не щупал ни демоны ни процессы, поэтому и спросил про возможные варианты. Теперь покурю-погуглю что это. С веб-сервером то есть опыт, поэтому и реализовал пока на нем )
Наверное самый простой вариант - поднимай дочерний процесс, в нём запускай сервак и слушай сокет с каким-нибудь уникальным именем Нужны нодовские модули child_process и net
Что за библиотека, которая на clojure?
Обсуждают сегодня