首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jetty不关闭超时连接

Jetty不关闭超时连接
EN

Stack Overflow用户
提问于 2016-02-29 18:38:29
回答 1查看 1.5K关注 0票数 1

我用的是jetty-9。

我的配置是:connector.setIdleTimeout(20000)

我的jetty处理程序是:

代码语言:javascript
复制
public void handle(String target, Request baseRequest,
        HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {
    // TODO Auto-generated method stub


    AsyncContext ctx = request.startAsync();
    ctx.setTimeout(0);

     XXXXX...(Other process with ctx)
}

但在30秒之后,jetty只会打印如下日志:

代码语言:javascript
复制
DEBUG [org.eclipse.jetty.io.WriteFlusher]:  ignored: WriteFlusher@7cc4b130{IDLE} java.util.concurrent.TimeoutException: Idle timeout expired: 20004/20000 ms

DEBUG [org.eclipse.jetty.io.AbstractEndPoint]:  Ignored idle endpoint SelectChannelEndPoint@387b2c97{/127.0.0.1:59889<->8088,Open,in,out,-,-,20005/20000,HttpConnection}{io=0/0,kio=0,kro=1}

连接没有关闭,但active.And I仍然可以使用"ctx“将rsp发送到客户端。

有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-29 23:26:07

这里的行为将取决于XXXX处理程序所做的工作。如果XXXX处理仍在运行,那么AsyncContext超时将不会触发,因为它只有在调度到servlet的线程返回到容器时才被激活。

因此,如果XXX正在做很多事情或者在睡觉,那么超时是不会起作用的。

javadoc还说,0或更小的超时意味着没有超时!因此尝试使用timeout(1)或一些较小的值。

编辑:此外,一旦分派了servlet,连接器空闲超时仅适用于阻塞IO操作。因此,如果您不使用阻塞API进行读取或写入,那么连接器空闲超时也不适用。

servlet规范基本上信任servlet永远不会变得无限-容器不允许在处理时间上施加空闲超时。很久以前,Jetty经常在这种情况下中断servlet,但我们被明确告知这与规范背道而驰。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35697435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档