我有一些C函数需要经常从nodeJS调用(时间间隔小于1秒)。C函数接受一个参数并返回一个值,该值可能是int或数组。
它可以像下面这样简单:
int main() {
int x = 2;
return x;
}
字符串
我需要在nodeJS中获取值x并能够执行console.log(x)
我试过使用node-ffi
,但我从网上了解到它有很大的开销,因此对于频繁的函数调用来说效率很低。
我也考虑过写插件,但似乎很麻烦(用不熟悉的V8,C代码等等…)
关于nodeJS和C之间的集成也没有太多的资源(它们大多是nodeJS和C)
有人能帮我解释一下吗?- 谢谢-谢谢
3条答案
按热度按时间llycmphe1#
把你的c代码改成
字符串
用gcc编译它,在与节点文件相同的目录中
型
在节点文件中,要求exec()
型
并像这样使用它:
型
这很好用,它每次都会启动一个新的进程。
另一方面,如果你想保持子进程运行,并从node调用该代码中的函数,你可以这样做:
型
编译multiplyBy2.c,然后:
型
0wi1tuuw2#
实现此目的的一种方法是使用
node-gyp
构建Node addon。Node友好地提供了a hello world addon demo,我们将在下面大致遵循它。首先,您需要安装
node-gyp
。在进行初始设置时,请确保配置了兼容的Python版本。接下来你需要提供一个binding.gyp
,这个文件告诉node-gyp
如何构建你的项目。一个简单的binding.gyp
可能看起来像这样:字符串
准系统绑定可能如下所示。虽然它是用C编写的,但您可以以大致相同的方式集成C代码。请参阅this article,了解如何混合使用C和C。
型
接下来,您可以运行
node-gyp configure
来让node-gyp
设置构建工具,然后运行node-gyp build
来让它构建您的插件。如果输出以gyp info ok
结尾,那么您已经成功构建了第一个本机插件。您可以将绑定作为任何旧模块导入并在Node中使用:
型
vm0i2vca3#
使用子进程。,... https://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback