开发者社区> 问答> 正文

为什么多个进程同时监听了同一端口?? 400 报错

为什么多个进程同时监听了同一端口?? 400 报错

如题如图

追问一下:怎么保证一个请求过来,只被一个监听进程响应了!

 

展开
收起
爱吃鱼的程序员 2020-06-02 17:27:34 863 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。

    2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。

    ######正解!######自己顶一下######

    引用来自“火星人”的答案

    1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。

    2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。

    不是使用select方法?
    ######类似 进程池######

    引用来自“ZYud”的答案

    引用来自“火星人”的答案

    1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。

    2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。

    不是使用select方法?
    工作进程的事件处理方式是可选的,在编译的时候配置即可,windows下用的是select,linux下默认用的是epoll或者kqueue。
    ######

    引用来自“火星人”的答案

    1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。

    2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。

    可是按道理说一个端口可是有一个应用的多个进程同时占用,但只能被一个进程所监听的呀!

    一般情况下都是master进程负责监听,将任务分配给不同的子进程,即使是master进程fork出来的,也只是或得那个socket的句柄,也并未真正获得监听句柄吧!

    追问一下:多个进程可以监听同一个端口,岂不是不同的应用可以监听同一个端口!

    能帮我写个简单的c例子么?

    ######

    引用来自“痞子汤”的答案

    类似 进程池
    进程池貌似跟这个是两码事儿吧
    ######

    引用来自“火星人”的答案

    1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。

    2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。

    对于第二点,如果他是这么实现的,岂不是性能是master进程负责监听分配任务的方式底,毕竟master的事儿没少做,还有资源竞争的代价在里面
    ######

    多个进程可以监听同一个端口,岂不是不同的应用可以监听同一个端口!

    两个完全独立的进程 , 和 fork 出来的父子进程是有区别的吧。  再说我觉得和进程池有 点类似,图已经表明 

    在accept 之前你 fork 一堆子进程,在子进程内进行 accept 应该莫有问题吧




    ######个人理解
    2020-06-02 17:27:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
服务上云加速大家居产业C2M进程 立即下载
探索连接的最后十秒”落时”的网关 立即下载
低代码开发师(初级)实战教程 立即下载

相关实验场景

更多