我希望能用一个master生成若干childprocess,由master负责接收request,然后根据url路由到不同的childprocess进行处理(这是由于数据同步要求只能分派到固定的一个process进行处理),这显然无法用cluster解决。当然也可以让子进程侦听不同端口,由master转发request,但这样要引入额外间接层和开销。 是否有高手可以提供指导,不胜感激!
5 回复
这本质上就是所谓的IPC问题(inter-process communication),成熟的解决方案就那几种,具体到nodejs平台上的选择貌似就3种,pipe/socket/unix domain socket,无论怎么折腾,若想把req,res直接传递到子进程,那是门都没有。就楼主的情况,选择unix domain socket吧,它的开销远低于连接数据库的开销,在考虑转发对性能的影响前,先考虑下改善数据库的访问速度吧。
可能有人不知道domain socket是什么玩意,其实就是server监听unix的某个path,与传统的socket区别就是domain socket没有额外的网络数据包开销,直接是内存数据的复制。
http.createServer(function(req,res){
//............
}).listen('/var/tmp/test.sock');
var opts={
socketPath:'/var/tmp/test.sock'
// more options...
}
var req=http.request(opts)