如果我有一个很长的等待请求(例如处理它的线程被阻塞,直到另一个提供一些数据),那么在响应准备好之前,客户端可能已经断开连接。有没有办法在处理请求的方法中发现这个?也就是说,不返回响应并看到jetty / jersey抛出IO异常。
答案 0 :(得分:0)
在尝试通过连接发送内容并且失败之前,您无法判断连接是否已关闭(抛出IOException
)。
我在单例EJB中存储LinkedBlockingDeque
s的映射(由接收实时流的外部系统的ID映射)。当某些事件发生需要发布到实时订阅源时,我只是通过该单例bean将事件排入队列。在队列的另一端 - 如果已连接 - 是JAX-RS Web服务,等待项目变为可用。现在,我使用deque而不是队列的原因是在写入和/或刷新IOException
时可能会抛出OutputStream
,表明客户端很可能已断开连接。 dequeue只允许我放回该项目,以便在下次外部系统连接时首先采用该项目。