Node.js 的 ZeroMQ 是否与 Electron 兼容?

Is ZeroMQ for Node.js compatible with Electron?

试图让 ZMQ Node bindings 与 Electron 一起工作让我非常头疼,尤其是在 Windows 上。我正在研究 Windows 7 和 Ubuntu 16.04,它们都有两个不同的问题。

在 Windows 上,当我尝试执行 require('zmq')

时出现错误
C:\vueelectron\app\node_modules\bindings\bindings.js:91 Uncaught Error: Could not locate the bindings file. Tried:
 → C:\vueelectron\app\node_modules\zmq\build\zmq.node
 → C:\vueelectron\app\node_modules\zmq\build\Debug\zmq.node
 → C:\vueelectron\app\node_modules\zmq\build\Release\zmq.node
 → C:\vueelectron\app\node_modules\zmq\out\Debug\zmq.node
 → C:\vueelectron\app\node_modules\zmq\Debug\zmq.node
 → C:\vueelectron\app\node_modules\zmq\out\Release\zmq.node
 → C:\vueelectron\app\node_modules\zmq\Release\zmq.node
 → C:\vueelectron\app\node_modules\zmq\build\default\zmq.node
 → C:\vueelectron\app\node_modules\zmq\compiled.1.0\win32\x64\zmq.node

我试过用 VS 2013 和 2015 编译,多次重建,使用 electron-rebuild 似乎没有任何效果。

在 Linux 上它加载正常,但问题是当我发送消息时,它似乎陷入某个地方的循环并且它不断发送发送数百条消息并继续无限期地这样做。 通过从 Ubuntu 存储库中的 ZMQ 版本升级到从 ZeroMQ 网站下载的最新版本解决了这个问题。

这是我在 Electron 应用程序的 index.html 文件中使用的代码。

const electron = require('electron')
const zmq = require('zmq')

const socket = zmq.socket('req')
socket.connect('tcp://10.10.0.51:3111')

socket.on('message', function (data) {
  console.log(socket.identity + ': answer data ' + data)
})

socket.send('test')

有没有其他人能够让 Electron + ZMQ 工作?如果是这样,您的开发环境是什么样的?谢谢。

将对队列的访问置于 api 层之后可能更安全。你也可能在稳定性方面取得更好的成功,电子中的原生模块可能非常棘手。

但我的意思是有一个 REST 服务器,您的电子应用程序可以与之通信。它会向 api 发送一条消息,然后它将消息排队等待您的应用程序。将网络级别的队列访问限制为仅 api 服务器。

问题是 Electron 提供的 node.js 二进制文件与您的节点版本不匹配。长答案是你需要用相同的 Node.js headers 来编译 Electron 和 ZeroMQ。这是 Electron 社区 http://github.com/electron/electron/issues/6805 的回复。不过现在有一个简短的答案!

使用 zeromq in place of zmq (same API). zeromq 为 electron 提供预构建的二进制文件,为 OS X、Windows 和 macOS/OS X 提供 node.js。安装后 zeromq, 重建你正在使用的电子版本:

npm rebuild zeromq --runtime=electron --target=1.4.5

感谢 zeromq.js 团队,祝您使用 ZeroMQ 愉快!