我最近在 Windows 上发现了 SO_REUSEADDR
;并且 tomcat 通过 default 使用它.
我做了一个小测试,看看当另一个进程也在监听同一个端口时会发生什么。在我的案例中,另一个进程是 netcat
。结果令人惊讶:
- 无论我是先启动
nc
(netcat
) 还是tomcat
,如果是来自 tomcat 的响应 - 如果我用
bin/tomcat.bat
停止 tomcat,它也会终止nc
进程 - 如果我通过终止进程来停止 tomcat,则 nc 能够响应下一个连接
这是什么魔法? tomcat 是如何一直抓取进来的请求的?这是(即使其他进程正在监听,tomcat 也会为所有连接提供服务)保证的行为吗?我无法想象如何保证它但想问。
最佳答案
我能够根据用户 nos 在回复我的 other 时提出的问题来回答这个问题问题。
我意识到,由于我在测试中使用了 wget http://localhost:8080
,它使用的是只有 tomcat 正在监听的 IPv6
。
当我将其更改为 http://127.0.0.1:8080
时,我看到了完全不同的行为。
关于java - 多进程监听端口时,tomcat为什么会收到请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029708/