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

2023-11-02 21:11:58 +08:00
 fancy2020

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

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

2001 次点击
所在节点    程序员
10 条回复
nulIptr
2023-11-02 21:20:27 +08:00
你这种场景应该两个项目用不同端口。
啥系统都不能俩进程用一个端口吧,没有这么做的必要。
leeyuzhe
2023-11-02 21:22:49 +08:00
我觉得是监听到了不同的 ip 上面
rekulas
2023-11-02 21:25:22 +08:00
应该就是监听地址不一样
fancy2020
2023-11-02 21:28:48 +08:00
@nulIptr

不是 production ,是本地开发环境。
fancy2020
2023-11-02 21:31:53 +08:00
好像一个 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
2023-11-02 21:54:16 +08:00
@fancy2020 本地开发不同 app 也应该用不同端口呀,你讲讲为啥要用同个端口?
mikewang
2023-11-02 22:24:08 +08:00
@fancy2020 了解一下 Linux 上 socket 的 IPV6_V6ONLY 标志位。在 Linux 上监听 IPv6 端口默认也会同时监听 IPv4 ,所以会有端口冲突,而 macOS 上可能并不是这样的,所以产生了这种现象。

另外,除了 IPv4 和 IPv6 的问题,还可以了解一下 socket 中的 SO_REUSEADDR 和 SO_REUSEPORT ,还有 Windows 下的 SO_EXCLUSIVEADDRUSE 。这些标志和端口是否独占是有关的,如果设置为可以复用,那么其他程序也能使用该端口。
crystom
2023-11-02 22:58:47 +08:00
这个情况应该是 SO_REUSEPORT
fancy2020
2023-11-02 23:27:56 +08:00
@mikewang
@crystom

谢谢。
暂时没有深入研究的必要,不过还是谢谢提供的信息。
buf1024
2023-11-03 11:21:04 +08:00
四元组是唯一确定一个链接的,如果你本地有多个网卡包括环路,那么不同的 IP 监听一个端口是可以的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/988021

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX