node.jsを使用して構築している小さなWebアプリでメッセージキューを使用することを検討しています。私はresqueを見ましたが、それが適切かどうかはわかりません。目標は、socketioを使用したバックエンドおよびその他のクライアントアクションに基づいてクライアントに通知をプッシュすることです。私はsocketioだけでこれを行うことができましたが、適切なメッセージキューでこれをよりクリーンにでき、ホイールを再発明する必要がないと思いました。
そこのオプションは何ですか?
node.jsを使用して構築している小さなWebアプリでメッセージキューを使用することを検討しています。私はresqueを見ましたが、それが適切かどうかはわかりません。目標は、socketioを使用したバックエンドおよびその他のクライアントアクションに基づいてクライアントに通知をプッシュすることです。私はsocketioだけでこれを行うことができましたが、適切なメッセージキューでこれをよりクリーンにでき、ホイールを再発明する必要がないと思いました。
そこのオプションは何ですか?
回答:
非常に高速なnode_redisクライアントでredisを使用できます。組み込みのpubsubセマンティクスも含まれます。
ノードSTOMPクライアントを使用できます。これにより、次のようなさまざまなメッセージキューと統合できます。
このライブラリは以前に使用したことがないため、その品質を保証することはできません。しかし、STOMPはかなり単純なプロトコルなので、必要に応じて送信にハッキングできると思います。
別のオプションは、nodeでbeanstalkdを使用することです。beanstalkdはCで記述された非常に高速な「タスクキュー」であり、上記のブローカーの機能の柔軟性が必要ない場合に非常に適しています。
ここに私ができるいくつかの推奨事項があります:
node-amqp:Socket.IOと組み合わせて使用して、とりわけリアルタイムマルチプレイヤーゲームやチャットアプリケーションを作成するのに成功したRabbitMQクライアント。十分に信頼できるようです。
zeromq.node:ブローカーでないルートを下りたい場合、これは一見の価値があるかもしれません。機能を実装するための作業は増えますが、待ち時間が短縮され、スループットが向上する可能性が高くなります。
node-busmqを見てくださいてください。これは、redisに支えられたプロダクショングレードの高可用性でスケーラブルなメッセージバスです。
私はこのモジュールをグローバルクラウド用に作成し、現在、世界中のいくつかのデータセンターの実稼働環境にデプロイされています。名前付きキュー、ピアツーピア通信、保証された配信とフェデレーションをサポートしています。
このモジュールを作成した理由の詳細については、次のブログ投稿をご覧ください。メッセージバス上のすべて
私はKestrelを試すことをお勧めします。これはBeanstalkのように高速でシンプルですが、ファンアウトキューをサポートしています。memcachedを話します。Scalaを使用して構築され、Twitterで使用されています。
node-queue-libを見てください。。おそらくそれで十分です。node.jsとブラウザをサポートしています。配信とラウンドロビンの2つの配信戦略があります。JavaScriptのみ。
簡単な例:
var Queue = require('node-queue-lib/queue.core');
var queue = new Queue('Queue name', 'broadcast');
// subscribe on 'Queue name' messages
queue.subscribe(function (err, subscriber) {
subscriber.on('error', function(err){
//
});
subscriber.on('data', function (data, accept) {
console.log(data);
accept(); // accept process message
});
});
// publish message
queue.publish('test');
あなたが説明したように、socketIOでKUEを使用しました。私はジョブにsocketIDを保存し、それをJob Completeで取得できました。KUEはredisに基づいており、 githubに良い例が
このようなもの....
jobs.process('YourQueuedJob',10, function(job, done){ doTheJob(job, done); }); function doTheJob(job, done){ var socket = io.sockets.sockets[job.data.socketId]; try { socket.emit('news', { status : 'completed' , task : job.data.task }); } catch(err){ io.sockets.emit('news', { status : 'fail' , task : job.data.task , socketId: job.data.socketId}); } job.complete(); }
ewd-qoper8をチェックアウトすることもできます:https : //github.com/robtweed/ewd-qoper8