看到一个关于多进程监听一个端口来做负载均衡的例子,大概的思路就是主进程创建一个netServer,然后fork子进程,每个子进程创建一个httpServer:app,但是不监听。主进程在connection事件的时候拿到socket对象,然后通过process.send方法发送这个socket对象到子进程,然后手动设置socket对象的server属性为app,然后手动触发app的connection事件,大体思路就是这样。
以上是博文作者的思路,但是我现在有个想法就是通过URL来区别不同应用,从而访问不同的进程提供服务,对于以上方法有个问题就是,要解析URL就必须等到socket对象开始写数据,但是主进程必须在netServer被连接的时候就把socket对象给子进程,如果等到主进程解析完URL再进行进程分配时,主进程拿到的socket对象已经不会再继续被写入数据了,这个时候就不能触发子进程httpServer的连接事件了,从而也就无法提供服务了。
目前我有两个想法, 1、在主进程的netServer连接的时候,将socket对象收到的数据先存起来,等到解析完url,找到相应的子进程,然后新建一个socket对象,发送给子对象之后,然后开始往这个socket对象写刚刚存下来的数据,不知道这种方法是否可行? 2、主进程创建一个httpServer,然后根据URL选择完子进程之后,直接将request和response对象通过send方法传给子进程,有点担心的是,这种方法在大量数据发送或者接收的时候能做到负载均衡么?
刚刚开始学习nodejs,有什么地方说错的,请各位不吝赐教,在此先谢过各位了。
发现第二条路也走不通了,send方法只能发送类似文件描述符的东西,而不能发送对象,我说这方法这么霸气
顶上去,两天了,还是没解决这个问题,好纠结