node.js的句柄传递

       在一个主机启动多个服务器进程,让这些进程监听同一个端口号是不可能的 ,这是因为服务器的套接字文件描述符不相同,一个socket一个描述符只能用一个端口,所以在node.JS中想多进程监听同一个端口,之前的做法是主进程监听主端口,然后将请求分别代理到不同端口的子进程上,缺点是每创建一个socket需要用掉一个描述符,要知道进程描述符和系统描述符有数量限制的。ps:node底层对于每个端口都设置了一个选项,这个选项的含义是服务器套接字可以被不同进程复用的。只有系统级的描述表引用计数为0了才释放

      node为了解决这个问题加了一个进程间发送句柄的功能,send()方法不仅可以发送信息还可以发送句柄,句柄(文件描述符)其实是指针,指向内核中的文件信息,句柄对象可以是服务器、套接字(任何具有底层_handle成员的东西)。send()包括handle和message,如果message.cmd的值为NODE_HANDLE,取出message.type的值创建对应的对象,然后监听句柄。进程之间只是传递信息,并不是传递对象,具体底层原理以传递socket为例:参考文章父子进程之间,在同一地址下的 socket 传递时,各自都额外维护一个关联列表存储这些 socket 信息和ChildProcess实例,并且父进程中的net#Server类实例自己保存下所有父进程关联列表。在调用net.Server#getConnections这类方法时,遍历列表中的ChildPorcess实例发送内部消息,子进程列表中的对应项收到内部消息并处理返回,父进程中再结合返回结果和对应着这个ChildProcess类实例维护的 socket 信息,保证功能的正确性。

个人理解,仅保存学习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 11,524评论 0 6
  • xdh精英班20160909课后作业: Node.js HTTP 介绍 本文根据xdh精英班20160909课后作...
    birdflying阅读 4,359评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,024评论 19 139
  • 前一段时间,在看弗洛姆的《爱的艺术》,陆陆续续的看了大部分了。重要的不是怎样去爱,更重要的是我们自己对待爱情的观念...
    了梦一川阅读 2,325评论 0 1
  • 林珺又梦见黎昙了,他坐在一张蓝色的长椅上,对着自己贼贼地笑着,林珺从未见过他那样的笑,绝不亚于蒙娜丽莎笑窝里的神秘...
    陆Nene阅读 4,149评论 8 6

友情链接更多精彩内容