最近经常遇到一个问题,就是在本地做开发的时候,经常遇到两个项目占用同一个端口,但两个项目还是可以同时启动。
然后访问同一个端口,有时候会访问到第一个项目,有时候访问到第二个项目。
1
nulIptr 2023-11-02 21:20:27 +08:00
你这种场景应该两个项目用不同端口。
啥系统都不能俩进程用一个端口吧,没有这么做的必要。 |
2
leeyuzhe 2023-11-02 21:22:49 +08:00 1
我觉得是监听到了不同的 ip 上面
|
3
rekulas 2023-11-02 21:25:22 +08:00
应该就是监听地址不一样
|
5
fancy2020 OP 好像一个 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) |
7
mikewang 2023-11-02 22:24:08 +08:00 1
@fancy2020 了解一下 Linux 上 socket 的 IPV6_V6ONLY 标志位。在 Linux 上监听 IPv6 端口默认也会同时监听 IPv4 ,所以会有端口冲突,而 macOS 上可能并不是这样的,所以产生了这种现象。
另外,除了 IPv4 和 IPv6 的问题,还可以了解一下 socket 中的 SO_REUSEADDR 和 SO_REUSEPORT ,还有 Windows 下的 SO_EXCLUSIVEADDRUSE 。这些标志和端口是否独占是有关的,如果设置为可以复用,那么其他程序也能使用该端口。 |
8
crystom 2023-11-02 22:58:47 +08:00
这个情况应该是 SO_REUSEPORT
|
10
buf1024 2023-11-03 11:21:04 +08:00
四元组是唯一确定一个链接的,如果你本地有多个网卡包括环路,那么不同的 IP 监听一个端口是可以的。
|