2016-07-18 13 views
1

私は、特にWindows上でZMQ Node bindingsを電子版で扱おうとすると頭が痛いです。私はWindows 7とUbuntu 16.04で作業していますが、どちらも2つの問題があります。ZeroMQ for Node.jsはElectronと互換性がありますか?

はWindows上で、私はVS 2013および2015、で再構築を複数回コンパイルしようとした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\6.1.0\win32\x64\zmq.node 

をしようとすると、エラーが出るelectron-rebuild全く動いていないように使用しました。

Linux上ではうまくロードされますが、メッセージを送信するとどこかのループでスタックして何百というメッセージが送信され続け、無期限に処理が続行されるという問題があります。これは、UbuntuリポジトリのZMQからZeroMQのWebサイトからダウンロードした最新のZMQにアップグレードすることで解決しました。

これは私の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') 

エレクトロン+ ZMQは誰でも入手できましたか?もしそうなら、あなたの開発環境はどうですか?ありがとう。

+0

詳細な指示が私の答えに追加されました。確認してください。 – stanleyxu2005

答えて

0

APIレイヤの背後にあるキューにアクセスする方が安全かもしれません。あなたも安定性でより良い成功を収めているかもしれません。電子のネイティブモジュールは非常に扱いにくいものです。

しかし、あなたの電子アプリケーションが通信するRESTサーバーがあることを意味します。そのAPIにメッセージを送信し、アプリケーションのメッセージをキューに入れます。ネットワークレベルのキューへのアクセスを、apiサーバのみに制限する。

+0

応答をありがとう、私は実際にそのシナリオから来ています。しかし、我々は待ち時間を最小限に抑えようとしており、試行したすべてのHTTPサーバーには少なくとも30ミリ秒程度の時間を追加しました。それはまた、私が避けたいと思う複雑な余分な層です。奇妙な部分は、それがLinuxとMacで動作するのがどれくらい簡単かです。 –

+0

私はこの考えに感謝します。しかし、どのようにAPI層を透明にするか?例えば。私は多くのzmqコードを持つ純粋なnode.jsアプリケーションを持っています。今私は、電子アプリのAPI層を追加する必要があります。既存のコードを変更する必要はありませんが、 'require(" zmq ")'を 'require(" zmq-bridge ")'に置き換えてください。私はすべての単一の点をチェックし、マッピングを1つずつ行う必要がありますか? – stanleyxu2005

4

問題はElectronとノードのバージョンによって配信される不一致のnode.jsバイナリです。長い答えは、同じNode.jsヘッダーでElectronとZeroMQをコンパイルする必要があることです。ここに電子コミュニティhttp://github.com/electron/electron/issues/6805からの応答があります。今でも短い答えがあります!

zmq(同じAPI)の代わりにzeromqを使用してください。 zeromqは、あなたが使用している電子のバージョンの再構築、zeromqをインストールした後OS X、Windows、およびMacOSの/ OS X用の電子およびNode.jsのためのビルド済みのバイナリを提供します。zeromq.jsへ

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

感謝をZeroMQで楽しい時間を過ごせます!

+0

返信いただきありがとうございますが、リンクはダウンしています。私は電子ビルダーを使って自分の問題を解決することができましたが、何が違うのか分かりませんが、今は必ず失敗することはありません。 –

+0

私たちはあなたのためにもっと簡単にするためのもう1つのステップを実行しました - [zmq-prebuilt](https://github.com/zeromq/zeromq.js#rebuilding-for-electron)(zeromqと改名されました。js、zeromq on npm)は、電子リリース用に事前ビルドされたバイナリを提供しています:https://github.com/zeromq/zeromq.js#rebuilding-for-electron –

関連する問題