在Tomcat 7中使用NIO Http连接器 - 它限制我使用一个连接?

时间:2012-04-27 08:01:35

标签: tomcat nio

我想创建一个基本上保持连接的服务,直到建立第二个连接,告诉它停止持有第一个连接。

将NIO Http Connector与所有默认设置一起使用(在Tomcat和连接器中)。

我使用一个线程(很像tomcat aio doc中的“messageSender”类)来保存第一个响应并每5秒写一个字符。这工作正常 - 线程持有它并在提示上释放它。唯一的问题是服务('event'方法)没有得到第二次调用(对于第二个连接的'begin'事件),直到我关闭第一个连接。

重复一遍,这就是:

连接1 - > tomcat创建调用myService.event(event)的线程'http-nio-8081-exec-2';

myService.event给出对'myDaemonThread'的响应(它保存引用并每5秒写入一次响应)。退出方法。

'myDaemonThread'使用“synchronized(this){this.wait(5000);}”进行等待(最初使用的Thread.sleep()但是为了使这项工作,我改为wait())

连接2 - >已启动,但没有线程调用myService.event

连接1在浏览器中停止,tomcat创建调用myService.event(event.END)的线程'http-nio-8081-exec-4'。退出方法。

tomcat(创建??现在或更早,无法告诉)线程'http-nio-8081-exec-6'为连接二调用myService.event(event.BEGIN)。

......其余的都不重要。

所以这似乎打败了使用NIO的全部目的......任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

可能的原因

  1. Tomcat不允许来自同一客户端的两个相同的请求
  2. 客户端在幕后排队相同的请求。
  3. 无论如何,结果是,如果我为第二个请求更改客户端,一切正常。如果我将垃圾参数添加到同一客户端上的第二个请求,它就可以正常工作。

    解决方案

    将垃圾参数添加到请求中