在Jetty v.9.4.3

时间:2017-07-18 07:51:13

标签: java jetty embedded-jetty jetty-9

当我向嵌入式Jetty服务器添加两个连接器时,我既不能使用HTTP也不能使用HTTPS - 浏览器/卷曲只会被卡住。我用来创建嵌入式Jetty的代码大致如下(它基于这个例子 - http://self-learning-java-tutorial.blogspot.de/2015/10/jetty-configuring-many-connectors.html):

HttpConfiguration httpConfiguration = new HttpConfiguration();
httpConfiguration.setRequestHeaderSize(requestHeaderSize);

ServerConnector httpConnector= new ServerConnector(server, 1, -1, new 
    HttpConnectionFactory(httpConfiguration));
httpConnector.setPort(getPort());
httpConnector.setReuseAddress(true);
httpConnector.setIdleTimeout(maxTimeout);
server.addConnector(httpConnector);

HttpConfiguration httpsConfiguration = new HttpConfiguration();
httpsConfiguration.setSecureScheme("https");
httpsConfiguration.setSecurePort(securePort);
httpsConfiguration.addCustomizer(new SecureRequestCustomizer());

ServerConnector sslConnector = new ServerConnector(server,
            new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
            new HttpConnectionFactory(httpsConfiguration));
sslConnector.setPort(securePort);
sslConnector.setIdleTimeout(maxTimeout);
sslConnector.setReuseAddress(true);

server.addConnector(sslConnector);

ServletContextHandler servContext = new 
ServletContextHandler(ServletContextHandler.NO_SESSIONS);
servContext.setContextPath("/");
server.setHandler(servContext);
server.start();

我打开了org.eclipse.jetty中的调试日志,并在任何请求中得到以下内容:

 Selector loop woken up from select, 0/1 selected [] [io.ManagedSelector][jetty-default-3]
 Running action org.eclipse.jetty.io.ManagedSelector$Accept@4278b8a5 [][io.ManagedSelector] [jetty-default-3]
 Queued change org.eclipse.jetty.io.ManagedSelector$CreateEndPoint@535fb063 on org.eclipse.jetty.io.ManagedSelector@3959754c id=3 keys=2 selected=0 [] [io.ManagedSelector] [jetty-default-3]
 EatWhatYouKill@1289003f/org.eclipse.jetty.io.ManagedSelector$SelectorProducer@7ff1b622/PRODUCING/0/1->PRODUCING/0/1 PEC org.eclipse.jetty.io.ManagedSelector$CreateEndPoint@535fb063 [] [strategy.EatWhatYouKill] [jetty-default-3]
 Selector loop waiting on select [] [io.ManagedSelector] [jetty-default-3]

当只添加一个连接器时,一切都按预期工作。

P.S。所以问题"Selector loop waiting on select" when running multiple test cases which use wiremock stubsJetty+Jersey infinite loop with curl post query除了在9.3中修复的码头错误(我使用9.4.3)之外没有给出任何答案

1 个答案:

答案 0 :(得分:3)

嵌入式Jetty在1台服务器上支持尽可能多的连接器。 Jetty没有技术限制(存在的唯一限制是在您的环境中的操作系统和网络堆栈中)

重要的是要注意你必须有一个健全的HttpConfiguration设置。 因为他们可以引用彼此的连接器。 (这是为了#34;安全"行为,安全限制等)

虽然可能有多个简单的连接器彼此不了解,但这不是一般用例。

使用HTTPS(也称为HTTP over TLS / SSL)时,证书(大小,类型,算法等)和密码套件选择的选择将影响您连接到该HTTPS连接器的能力。

请注意,HTTPS是TLS(不是SSL),Jetty可以使用对TLS的ALPN扩展,允许客户端协商实际使用的下一个协议(无论是HTTP / 1.x或HTTP / 2还是您配置的任何协议)下一个协议列表是)

以下是嵌入式Jetty中多个连接器的几个示例。

eclipse/jetty.project - embedded/ManyConnectors.java

eclipse/jetty.project - embedded/LikeJettyXml.java

jetty-project/embedded-jetty-cookbook - ConnectorSpecificContexts.java

jetty-project/embedded-jetty-cookbook - ConnectorSpecificWebapps.java

jetty-project/embedded-jetty-cookbook - SecuredRedirectHandlerExample.java

jetty-project/embedded-jetty-cookbook - ServletTransportGuaranteeExample.java