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



我正在写一个基于nodejs的rest API。

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

我想通知另一个用户,他已经被添加为朋友,通过不同的方法(推送通知,邮件,等等)。我不想在API进程中做通知,相反,我想发布一个事件,另一个nodejs进程(甚至可能运行在另一台机器上)将拾取并执行通知工作。

实现这种体系结构的公认方法是什么?这里的关键是,我想在不同的 nodejs进程之间的pub/sub模式,甚至可能不共享同一台机器,所以我想常规的EventEmitter不会有帮助。

谢谢你的帮助!

  1. 首先想到的是使用@substack的dnode项目。几年前,他写了一篇关于将dnode(一个基于javascript的RPC框架)改造成PubSub框架的博文。详见:http://substack.net/roll_your_own_pubsub_with_dnode

  2. 似乎Faye也越来越流行,在那里你可以启动一个node.js服务器作为消息管理器。

  3. 另外,您可以考虑使用套接字。

您还可以尝试通过使用外部实时网络(如PubNub)来消除基础设施开销。PubNub每天最多可以免费使用20台设备(参见定价页面)。他们在node.js API GitHub页面上有一些例子,但基本结构是:

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 );
    }
});

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

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

这显然更容易工作,可以帮助验证您为(潜在的)多个服务器选择的Pub/Sub模型。好运!

相关内容

最新更新