网络DYNOS可以处理HTTP请求
同时网络DYNOS处理这些工人DYNOS可以从它处理工作。
但我不知道如何使Web DYNOS和工人DYNOS相互通信。
例如,我想接收网络DYNOS HTTP请求
,将其发送给工人DYNOS
,处理工作,并送回结果网页DYNOS
,网页上显示的结果。
这是可能的Node.js的? (带的RabbitMQ或苦厄或等)?
我无法找到一个例子Heroku的文档
或者我应该实现网络DYNOS所有码,只缩放网页DYNOS?
网络DYNOS可以处理HTTP请求
同时网络DYNOS处理这些工人DYNOS可以从它处理工作。
但我不知道如何使Web DYNOS和工人DYNOS相互通信。
例如,我想接收网络DYNOS HTTP请求
,将其发送给工人DYNOS
,处理工作,并送回结果网页DYNOS
,网页上显示的结果。
这是可能的Node.js的? (带的RabbitMQ或苦厄或等)?
我无法找到一个例子Heroku的文档
或者我应该实现网络DYNOS所有码,只缩放网页DYNOS?
作为对高级别文章后台作业和排队提示,您的网络DYNOS需要通过一个中间机构(通常是队列)与你的工人DYNOS通信。
要做到这听起来像你希望遵守这个一般方法:
至于实际执行去我不是太熟悉Node.js的最好的图书馆,但这种粘合在一起的过程都可以在Heroku作为组件加载项 。
队列:AMQP是一个很好的支持队列协议和CloudAMQP插件可以作为您的网络和工人之间DYNOS消息队列。
共享状态:可以使用的一个Postgres的插件分享正在处理作业的状态或一些更高性能,例如内存缓存或Redis的 。
因此,要总结,你必须使用一个中间的附加组件在Heroku DYNOS之间的通信。 虽然这种方法涉及到多一点的工程,结果是正确解耦和可扩展的架构。
从我可以告诉,Heroku的不提供给你沟通的方式,所以你必须构建自己。 为了沟通,通过节点的另一过程中,你可能会处理进程的标准输入/输出/手动犯错,是这样的:
var attachToProcess = function(pid) {
return {
stdin: fs.createWriteStream('/proc/' + pid + '/fd/0'),
stdout: fs.createReadStream('/proc/' + pid + '/fd/1'),
stderr: fs.createReadStream('/proc/' + pid + '/fd/2')
};
};
var pid = fs.readFile('/path/to/worker.pid', 'utf8', function(err, pid) {
if (err) {throw err;}
var worker = attachToProcess(Number(pid));
worker.stdin.write(...);
});
然后,在你的工作进程,你将不得不存储在pid文件的PID:
fs.writeFile('/path/to/worker.pid', process.pid, function(err) {
if (err) {throw err;}
});
我没有实际测试过任何这一点,所以它可能会采取一些工作和建设就可以了,但我认为其基本思路是清晰的。
我只注意到你用“Redis的”标记这个为好,认为我应该补充一点,你还可以使用Redis的发布/订阅您的各种进程间通信作为解释node_redis自述 。