我正在编写基于nodejs的rest API。
我的API有不同的方法,例如put / friends将用户添加到当前登录用户的朋友列表中。
我想通过不同的方法(推送通知,邮件等)通知其他用户,他已被添加为好友。我不想在API流程中进行通知,而是希望发布另一个nodejs处理的事件(可能甚至在不同的机器上运行),将拾取并执行通知工作。
实施此类架构的可接受方法有哪些?这里的关键是我想要不同 nodejs进程之间的pub / sub模式,甚至可能不共享同一台机器,所以我想常规的EventEmitter不会帮助那里。
感谢您的帮助!
答案 0 :(得分:5)
首先想到的是使用@ substack' dnode 项目。几年前,他写了一篇关于将dnode(一个基于JavaScript的RPC框架)改编成PubSub框架的博客文章。详情请参阅:http://substack.net/roll_your_own_pubsub_with_dnode
似乎Faye也变得越来越流行,您可以在其中启动一个充当消息管理器的node.js服务器。
此外,您可以查看使用socket.io and redis as described here。
您还可以尝试使用 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.'
});
这显然更加简单,可以帮助验证您为(可能)多个服务器选择的发布/订阅模型。祝你好运!