时间:2021-07-01 10:21:17 帮助过:16人阅读
本文介绍了Node.Js中实现端口重用原理详解,分享给大家,具体如下:
起源,从官方实例中看多进程共用端口
执行结果:
$ node server.js
Master 3596 is running
Worker 4324 started
Worker 4520 started
Worker 6056 started
Worker 5644 started
了解http.js模块:
我们都只有要创建一个http服务,必须引用http模块,http模块最终会调用net.js实现网络服务
答案很快就可以通过cluster._getServer 这个函数找到
代理了server._listen2 这个方法在work进程的执行操作
向master发送queryServer消息,向master注册一个内部TCP服务器
master进程收到queryServer消息后进行启动服务
如果地址没被监听过,通过RoundRobinHandle监听开启服务
如果地址已经被监听,直接绑定handel到已经监听到服务上,去消费请求
看到这一步,已经很明显,我们知道了多进行端口共享的实现原理
其实端口仅由master进程中的内部TCP服务器监听了一次
因为net.js 模块中会判断当前的进程是master还是Worker进程
如果是Worker进程调用cluster._getServer 去hack原生的listen 方法
所以在child调用的listen方法,是一个return 0 的空方法,所以不会报端口占用错误
那现在问题来了,既然Worker进程是如何获取到master进程监听服务接收到的connect呢?
监听master进程启动的TCP服务器的connection事件
通过轮询挑选出一个worker
向其发送newconn内部消息,消息体中包含了客户端句柄
有了句柄,谁都知道要怎么处理了哈哈
下面让我们看看Worker进程接收到newconn消息后进行了哪些操作
总结
net模块会对进程进行判断,是worker 还是master, 是worker的话进行hack net.Server实例的listen方法
worker 调用的listen 方法是hack掉的,直接return 0,不过会向master注册一个connection接手的事件
master 收到客户端connection事件后,会轮询向worker发送connection上来的客户端句柄
worker收到master发送过来客户端的句柄,这时候就可以处理客户端请求了
相关推荐:
Node实现静态资源服务器
以上就是Node.Js中实现端口重用原理详解的详细内容,更多请关注Gxl网其它相关文章!