我想创建一个基本上保持连接的服务,直到建立第二个连接来告诉它停止保持第一个连接。
将 NIO Http 连接器与所有默认设置一起使用(在 Tomcat 和连接器中)。
我使用一个线程(很像 tomcat aio doc 中的“messageSender”类)来保存第一个响应并每 5 秒写入/刷新一个字符。这工作正常 - 线程持有它并在提示时释放它。唯一的问题是服务(“事件”方法)在我关闭第一个连接之前没有得到第二个调用(对于第二个连接的“开始”事件)。
所以重复一遍,这就是发生的事情:
连接 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(现在或更早创建?
……其余的都不重要了。
所以这似乎违背了使用 NIO 的全部目的......有人知道为什么会这样吗?