2

我有一个场景,我试图以非阻塞方式提供数据,该方式由 RxJava Observable(也是非阻塞)提供。我正在使用 ServletOutputStream 提供的 WriteListener 回调。我遇到了一个问题,java.lang.IllegalStateException: UT010035: Stream in async mode was not ready for IO operation即在成功isReady()检查 ServletOutputStream 后写入立即抛出 IllegalStateException ()。

在深入研究的同时,我在ServletOutputStream的 Undertow 实现中注意到了这条评论:

一旦设置了写侦听器,操作只能从写侦听器回调中对此流调用。尝试从不同的线程调用将导致 IllegalStateException。

鉴于我的数据源是异步的,在某些情况下,onWritePossible()回调将达到没有立即可用数据的状态,我需要等待从源接收到更多数据。在这些情况下,我需要与来自我的数据源回调的流进行交互,这将是一个不同的线程。唯一的其他选择是暂停用于调用的线程onWritePossible()并等待更多数据到达,但这将是一个阻塞操作,会破坏整个目的。

我还缺少另一种方法吗?Servlet 3.1 规范似乎不需要 Undertow 的单线程要求。从我读过的内容来看,鉴于应用程序协调流访问同步,其他实现似乎可以容忍多线程方法。

4

0 回答 0