V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fancy2020
V2EX  ›  程序员

macOS 中允许不同进程占用同一个端口?

  •  
  •   fancy2020 ·
    fanchangyong · 176 天前 · 1762 次点击
    这是一个创建于 176 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近经常遇到一个问题,就是在本地做开发的时候,经常遇到两个项目占用同一个端口,但两个项目还是可以同时启动。

    然后访问同一个端口,有时候会访问到第一个项目,有时候访问到第二个项目。

    nulIptr
        1
    nulIptr  
       176 天前
    你这种场景应该两个项目用不同端口。
    啥系统都不能俩进程用一个端口吧,没有这么做的必要。
    leeyuzhe
        2
    leeyuzhe  
       176 天前   ❤️ 1
    我觉得是监听到了不同的 ip 上面
    rekulas
        3
    rekulas  
       176 天前
    应该就是监听地址不一样
    fancy2020
        4
    fancy2020  
    OP
       176 天前
    @nulIptr

    不是 production ,是本地开发环境。
    fancy2020
        5
    fancy2020  
    OP
       176 天前
    好像一个 IPv4 一个 IPv6 ,好吧,又学到了~


    >lsof -itcp:3000 -nP
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    node 80591 xx 30u IPv4 0xfa89f45c68805de3 0t0 TCP *:3000 (LISTEN)
    node 80652 xx 24u IPv6 0xfa89f46ac2bdbc7b 0t0 TCP *:3000 (LISTEN)
    nulIptr
        6
    nulIptr  
       176 天前 via iPhone
    @fancy2020 本地开发不同 app 也应该用不同端口呀,你讲讲为啥要用同个端口?
    mikewang
        7
    mikewang  
       176 天前   ❤️ 1
    @fancy2020 了解一下 Linux 上 socket 的 IPV6_V6ONLY 标志位。在 Linux 上监听 IPv6 端口默认也会同时监听 IPv4 ,所以会有端口冲突,而 macOS 上可能并不是这样的,所以产生了这种现象。

    另外,除了 IPv4 和 IPv6 的问题,还可以了解一下 socket 中的 SO_REUSEADDR 和 SO_REUSEPORT ,还有 Windows 下的 SO_EXCLUSIVEADDRUSE 。这些标志和端口是否独占是有关的,如果设置为可以复用,那么其他程序也能使用该端口。
    crystom
        8
    crystom  
       176 天前
    这个情况应该是 SO_REUSEPORT
    fancy2020
        9
    fancy2020  
    OP
       176 天前 via iPhone
    @mikewang
    @crystom

    谢谢。
    暂时没有深入研究的必要,不过还是谢谢提供的信息。
    buf1024
        10
    buf1024  
       176 天前
    四元组是唯一确定一个链接的,如果你本地有多个网卡包括环路,那么不同的 IP 监听一个端口是可以的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2693 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:06 · PVG 19:06 · LAX 04:06 · JFK 07:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.