Undertow是否支持来自异步源的异步I / O?

时间:2017-12-01 22:49:30

标签: java asynchronous rx-java undertow servlet-3.1

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

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

  

一旦设置了写侦听器,就必须仅在写入侦听器回调的此流上调用操作。尝试从其他线程调用将导致IllegalStateException。

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

我还缺少另一种方法吗? Servlet 3.1规范似乎并不要求Undertow的单线程要求。根据我的阅读,鉴于应用程序协调流访问同步,其他实现似乎容忍多线程方法。

0 个答案:

没有答案