我想创建一个基本上保持连接的服务,直到建立第二个连接,告诉它停止持有第一个连接。
将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的全部目的......任何人都知道为什么会这样?
答案 0 :(得分:1)
无论如何,结果是,如果我为第二个请求更改客户端,一切正常。如果我将垃圾参数添加到同一客户端上的第二个请求,它就可以正常工作。
将垃圾参数添加到请求中