目前我们有一个以这种方式启动的 Jetty 7 服务器
//create a new server listening on the 80
Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setReuseAddress(false);
connector.setPort(80);
server.setConnectors(new Connector[]{connector});
...
server.start();
Run Code Online (Sandbox Code Playgroud)
当没有其他应用程序捕获 80 端口时,一切都很好。我还确保两个 Jetty 实例无法开始侦听同一端口,因为setReuseAddress.
然而,有一些其他应用程序开始侦听端口 80 并且 Jetty 服务器仍然设法启动(未能在那里提供连接)的情况。
C:\Users\bacadmin>netstat -anov | find ":80 "
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 3976
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 3808
TCP [::]:80 [::]:0 LISTENING 3976
Run Code Online (Sandbox Code Playgroud)
如果端口未打开,这怎么可能,以及如何确保 Jetty 在启动期间获得异常。
Jetty 和任何基于 Java 的服务都可以毫无例外地绑定一个繁忙的端口。
如果您使用 Sun JVM 7 作为主机 JVM,请注意其中存在与 IPv6 堆栈相关的问题。它仍然没有固定。
好消息,存在解决方法。只需使用-Djava.net.preferIPv4Stack=true. 仅当您没有计划在您的应用程序中支持 IPv6 时,这才有效。
谢谢。
| 归档时间: |
|
| 查看次数: |
6037 次 |
| 最近记录: |