Servlet 3.0 AsyncContext在超时时返回响应

时间:2012-08-21 10:12:27

标签: java servlet-3.0

我遵循this教程并实施了一个简单的聊天应用程序。 我正在最新的Mozilla Firefox和谷歌Chrome浏览器中测试它。

我主要担心的是,消息交换似乎并不是实时发生的。即使所有服务器处理都在距离请求不到一秒的时间内发生,浏览器也会在超过AsyncContext超时后立即获得响应。

即使是默认的10秒或通过AsyncContext.setTimeout()添加的自定义值,响应时间与超时相同。这应该是预期的行为吗?有没有办法强制服务器在响应准备就绪后立即发送响应,而不是等待空洞超时间隔?

1 个答案:

答案 0 :(得分:3)

您可能忘记了complete异步上下文。 Java 6文档:http://docs.oracle.com/javaee/6/api/javax/servlet/AsyncContext.html#complete()

watcherExecutor.execute(new Runnable(){
                        public void run() {
                           // publish a new bid event to a watcher
                           aCtx.getResponse().getWriter().print("A new bid on the item was placed. The current price ..., next bid price is ...");
                           aCtx.complete();
                        };
                     });