誰かがちょっとした疑問で私を助けてくれれば幸いです。
socket.io ブロードキャスト機能を使用することと、Redis で pub/sub を使用してアーキテクチャを設計することの違いは何ですか?
たとえば、さらなる例では、node.js サーバーは、「キー」(モデル「todo」) と値「データ」の CRUD 要求 (作成) をリッスン (socket.io) しています。それを受信した瞬間に、同じユーザーに再度送信し、同じ「チャンネル」で聞いているすべてのユーザーにブロードキャストします。
socket.on('todo:create', function (data, callback) {
var id = guid.gen()
, todo = db.set('/todo/' + id, data)
, json = todo._attributes;
socket.emit('todos:create', json);
socket.broadcast.emit('todos:create', json);
callback(null, json);
});
しかし、socket.io を使用して何かを「ブロードキャスト」する別の方法があり、key:value 関数に Redis で pub/sub プラットフォームを使用しています。たとえば、別のケースでは、"キー" (モデル)、関数 (作成)、および値 (データ) に基づく CRUD リクエストをリッスンしています。ただし、この場合、受信すると、「socket.broadcast.emit()」経由では送信されず、Redis で公開されます。
socket.on(key + ':create', function (data, callback) {
var t = new ModelClass(data)
, name = '/' + key + ':create';
t.save(function (err) {
pub.publish(key, JSON.stringify({key: name, data: t}));
});
});
したがって、サーバー側では、モデルに加えられた (および Redis に公開された) すべての変更がキャッチされ (ハンドラー)、ユーザーのクライアント側 (私の場合は backbone.js) に送信され、それに従ってモデルがレンダリングされます。受信したキー:値:
sio.on('connection', function (socket) {
sub.on('message', function (channel, message) {
var msg = JSON.parse(message);
if (msg && msg.key) {
socket.emit(msg.key, msg.data);
}
});
だから私の質問は非常に単純です:-):両方のアーキテクチャの違いは何ですか? どちらがよりスケーラブルですか? より良いデザイン?モードアドバンス?
pub/sub アーキテクチャは、「リアルタイム」をネイティブにサポートする Node.js とは対照的に、Ruby のように自然に「リアルタイム」をサポートしないプラットフォームに適しているように見えます。. 私が間違っている?