Node JS本地模块:你可以在独立的Libuv / NodeJS风格的过程中运行C / C ++方法吗?

这个有点奇怪

我写了一个大部分时间都运行良好的NodeJS本地模块,但是这个类包含一个在共享内存的上下文中运行的模块。

粗略地说,模块打开一个IO服务器,但有一个错误,需要我打开和closuresIO服务器来检索一个特定的值…当我执行此操作时,任何指针发现引用旧的IO服务器对象明显打破/ segfault(一个“涂鸦空间”的错误,对吧?)。

为了解决这个问题,我现在使用NodeJS的child_process.fork()在独立的上下文中运行错误的方法,并在主进程和分叉进程之间传递消息,让程序按需要运行(也就是我在里面调用方法分叉的进程,并使用'process.on(“message”,…)“来检索结果)。 这工作得很好,但感觉像一个非常昂贵的黑客…

为了logging,我尝试使用Libuv线程来运行该方法,但我遇到了同样的问题。 我猜这是因为函数调用仍然在共享内存中。

有没有办法让我用C ++在“NodeJS风格”过程中运行一小部分(或更多)C / C ++代码?

你不能把一种方法干净地分解成一个新的过程。 也许你应该做的是写一点C ++粘合剂作为一个节点模块,并开始一个单独的过程作为服务器。 然后你可以通过套接字(或者unix套接字,或者你的目标操作系统上的任何东西)与那个进程通信。

如果你真的遇到了内存损坏的问题,你可能希望将不好的代码隔离到一个单独的进程中,所以当它停止的时候,它不会去掉主节点进程 – 只是支持你需要的小型服务器。

编写C ++扩展到节点是相当容易的 – 我是一个经验丰富的C ++程序员,新的JavaScript,我刚刚开始做。 有几个技巧 –

  1. 使用NaN(本地抽象的节点) https://github.com/rvagg/nan保护您在0.10 – > 0.11 – > 0.12迁移的变化

  2. 通过教程( http://nodejs.org/api/addons.html )的“艰难的方式”,即键入每个示例,并构build它。

  3. 使用C ++unit testing库

我正在研究一个项目的例子(但已经相当好地工作了)在这里: https : //github.com/smikes/inchi InChI是代表分子的标准; 这使得C / C ++ InChI库可以从节点使用。