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