如何在nodejs中获得多个C ++插件实例?
我想在nodeJs的多个实例中使用C ++库。我正在使用绑定npm模块来包装C ++代码。但最后,C ++库成为共享对象。请为此提供帮助
我已将require('bindings')('library_name')与新关键字一起使用
我在要求下一个实例之前已经清除了要求缓存我使用过npm模块,可以清除缓存]
for (var i = 0; i < config.data.length; i++) {
libraryObj[data[i]] = new require('library-name'); // c++ library wrapper
}
无论我做什么,C ++库都会始终共享,这不是预期的行为。
回答如下:我建议您以不满足此要求的方式重新构造C ++插件。
您无法通过相同的过程再次加载相同的模块,如果这样做,它将返回相同的句柄(引用)
您可以从其他进程加载
在Windows上>
系统维护所有已加载的每个进程的引用计数模块。调用LoadLibrary会增加引用计数。呼唤FreeLibrary或FreeLibraryAndExitThread函数减少参考计数。当其引用计数时,系统将卸载模块达到零或进程终止时(无论参考计数)。
https://stackoverflow/a/9190995/12167785
在Linux上
如果再次使用dlopen()加载相同的库,则相同的文件返回句柄。 dl库维护以下项目的参考计数:库句柄,因此动态库直到与dlopen()一样,已多次调用dlclose()成功了。 _init()例程(如果存在)仅被调用一次。但是随后使用RTLD_NOW进行的调用可能会强制为早期加载了RTLD_LAZY的库。
https://stackoverflow/a/9191147/12167785
如何在nodejs中获得多个C ++插件实例?
我想在nodeJs的多个实例中使用C ++库。我正在使用绑定npm模块来包装C ++代码。但最后,C ++库成为共享对象。请为此提供帮助
我已将require('bindings')('library_name')与新关键字一起使用
我在要求下一个实例之前已经清除了要求缓存我使用过npm模块,可以清除缓存]
for (var i = 0; i < config.data.length; i++) {
libraryObj[data[i]] = new require('library-name'); // c++ library wrapper
}
无论我做什么,C ++库都会始终共享,这不是预期的行为。
回答如下:我建议您以不满足此要求的方式重新构造C ++插件。
您无法通过相同的过程再次加载相同的模块,如果这样做,它将返回相同的句柄(引用)
您可以从其他进程加载
在Windows上>
系统维护所有已加载的每个进程的引用计数模块。调用LoadLibrary会增加引用计数。呼唤FreeLibrary或FreeLibraryAndExitThread函数减少参考计数。当其引用计数时,系统将卸载模块达到零或进程终止时(无论参考计数)。
https://stackoverflow/a/9190995/12167785
在Linux上
如果再次使用dlopen()加载相同的库,则相同的文件返回句柄。 dl库维护以下项目的参考计数:库句柄,因此动态库直到与dlopen()一样,已多次调用dlclose()成功了。 _init()例程(如果存在)仅被调用一次。但是随后使用RTLD_NOW进行的调用可能会强制为早期加载了RTLD_LAZY的库。
https://stackoverflow/a/9191147/12167785