Предположим, у меня есть простой файл hello world на c ++ или c (что поможет мне легче использовать его в node.js, предпочтительно c) и я хочу запустить его из файла node.js. Что является наиболее эффективным способом, учитывая, что файл будет использоваться для повышения производительности (изменение функций, интенсивно использующих процессор, с node.js на c / c ++).
Я наткнулся на аддоны но мне кажется, что для его использования мне придется преобразовать много кода, чтобы привести его в этот формат. Есть ли более простой способ?
Для нашего алгоритма сегментации изображения, который я написал в C++
Мне нужно было помочь разработчику полного стека обернуть общую библиотеку для node.js
, Насколько я вижу, с того дня, когда Google гулял и взламывал node.js
, что является несколько незнакомым миром для меня, что есть два основных варианта:
node-ffi
, или же,addons
как вы уже заявили.Для 1. выше, вам не нужно делать много. Вам просто нужно требовать ffi
, ref
а также ref-array
пакеты / дополнения в node.js
чтобы иметь возможность вызывать C API вашего кода приложения. Существует некоторая хороший учебник что я последовал, что помогло мне начать через 15 минут.
Однако мне нужно было выбрать 2. выше для нашего проекта в конце. Это было связано с тем, что наш полный стек разработчик полагался на некоторые другие дополнения, которые нуждались в последней версии node.js
, Видимо, когда мы проверяем выпускной node-ffi
на момент публикации этого ответа не служба поддержки v9.x
семья node.js
, Следовательно, я пошел путь родных аддонов. Мне понадобилось около 4 часов, чтобы понять и написать код. Я не уверен, что это самый удобный / эффективный способ, но я сделал
node.js
,nan
в node.js
тот reinterpret_cast
с char*
буфер node.js
и вызывает тот же C API нашей общей библиотеки, и, наконец,binding.gyp
,Видимо, родные абстракции для Node.js (он же nan
) должен использоваться пользователями, чтобы избежать необходимости обрабатывать критические изменения, внесенные в v8
, Есть еще одно хороший учебник Я нашел, что помогло мне легко решить мою проблему.
В заключение, Скотт ФриесНа сайте блога, похоже, есть много независимых статей / примеров для тех, кто хотел бы углубиться. Он также утверждает в каких ситуациях вы предпочитаете один подход другому (node-ffi
над родными аддонами, например). По сути, я понимаю, что написание собственных аддонов будет более эффективным, хотя для нашего приложения это не имеет большого значения. node-ffi
также дает удовлетворительное поведение, поскольку мы решали проблему сегментации изображения (которая в любом случае занимает больше времени, чем издержки вызова).
Короче говоря,
Я столкнулся с аддонами, но мне кажется, что для того, чтобы их использовать, мне придется преобразовать много кода, чтобы привести его в этот формат.
Ну, не обязательно! Это зависит от того, чего вы хотите достичь. Это может быть так же просто, как скомпилировать код C ++ для конкретной общей библиотеки C-API, а затем написать оболочку из 20 строк. nan
, который в основном делает некоторые reinterpret_cast
для операций с памятью на месте, и, наконец, ссылки на библиотеку в binding.gyp
,
Есть ли более простой способ?
Да, есть. node-ffi
может помочь вам решить проблему до получаса. Но тогда это может быть не будет самым эффективным для вашего сценария, или это может быть не будет приемлемым вариантом для вас, так как в настоящее время он не строится с v9.x
семья node.js
,
Других решений пока нет …