在不同的节点进程之间实现pubsub

时间:2014-03-24 19:12:51

标签: node.js publish-subscribe

我正在编写基于nodejs的rest API。

我的API有不同的方法,例如put / friends将用户添加到当前登录用户的朋友列表中。

我想通过不同的方法(推送通知,邮件等)通知其他用户,他已被添加为好友。我不想在API流程中进行通知,而是希望发布另一个nodejs处理的事件(可能甚至在不同的机器上运行),将拾取并执行通知工作。

实施此类架构的可接受方法有哪些?这里的关键是我想要不同 nodejs进程之间的pub / sub模式,甚至可能不共享同一台机器,所以我想常规的EventEmitter不会帮助那里。

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

  1. 首先想到的是使用@ substack' dnode 项目。几年前,他写了一篇关于将dnode(一个基于JavaScript的RPC框架)改编成PubSub框架的博客文章。详情请参阅:http://substack.net/roll_your_own_pubsub_with_dnode

  2. 似乎Faye也变得越来越流行,您可以在其中启动一个充当消息管理器的nod​​e.js服务器。

  3. 此外,您可以查看使用socket.io and redis as described here

  4. 您还可以尝试使用 PubNub 等外部实时网络来消除基础架构开销。 PubNub最多可免费提供20个日常设备(see the pricing page.)他们在node.js API GitHub page上有一些示例,但基本结构是:

    var pubnub = require("pubnub").init({
        publish_key   : "demo",
        subscribe_key : "demo"
    });
    
    pubnub.subscribe({
        channel  : "my_channel",
        callback : function(message) {
            console.log( "Friend request notice: ", message );
        }
    });
    

    要发送消息,您可以使用类似的发布。

    pubnub.publish({
        channel : "my_channel",
        message : 'You are now friends with Bob.'
    });
    

    这显然更加简单,可以帮助验证您为(可能)多个服务器选择的发布/订阅模型。祝你好运!