我目前正在Node.js + Electron中从事一个小型Linux项目,该项目需要扫描蓝牙LE广告数据包并从中提取数据,我可以使用经验丰富的开发人员在某件事上的一些建议。 首先,我了解高尚/放弃软件高贵的模块,它们以一种非常简单直接的方式准确地完成了我需要做的事情,但是我想把它作为最后的手段,因为让本机模块进行编译(特别是当需要重建电子时)让我头疼。当然,我在某个地方犯了一些错误,但这只是辅助项目的一小部分,我不打算花很多时间来尝试解决那些gyp“ not ok”错误和那些版本不匹配的警告。因此,这是我想到的两个解决方法以及我能想到的优点/缺点。你能给我我对他们的看法吗?您会选择哪一个?
注意:除了捕获BLE广告数据包(“最糟糕”的情况可能是每秒20个ish)之外,这里没有任何时间敏感的,因此,一旦BT扫描仪完成读取数据,它便只需将其推入堆栈以供其他模块处理。
1)我将使用C语言编写一个独立程序,使用bluez扫描数据包,提取数据(可能在单独的线程中,如果需要进行复杂的解码),然后将其写入stdout。主要的node.js项目将负责打开扫描程序并将其stdout流式传输到处理模块。 +:非常简单。另外,我已经有了一个运行正常的扫描器,只需要进行一些小的重构。 -:有一个额外的过程,那是可能会失败的额外部分。进程间通信速度很慢,尤其是通过管道I / O流完成通信时。
2)可以将很少的扫描程序实用程序转换为要包含在主node.js项目中的本机模块。 +:不需要在内存中进行额外的处理。 -:我需要学习如何制作本机模块(就像我说的那样,这不是一个花费大量时间的项目),而且我不得不再次处理GYP及其怪癖。
您会选择哪种解决方案?我想念什么吗?目前,我正在考虑#1,但这仅仅是因为这是我在类似情况下已经完成的事情,并且效果很好。我知道这很不雅致。 (..但是那不好吗?)
谢谢。
编辑:noble在我的系统上完美运行,我只是想防止将来出现问题,因为npm + gyp给了我很多问题。