Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
8eeda746
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8eeda746
编写于
10月 13, 2016
作者:
R
Rossen Stoyanchev
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1194 from violetagg/async-timeout
上级
9f8e8458
c1e5e3a8
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
70 addition
and
2 deletion
+70
-2
spring-web/src/main/java/org/springframework/http/server/reactive/AbstractResponseBodyFlushProcessor.java
...p/server/reactive/AbstractResponseBodyFlushProcessor.java
+1
-1
spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java
...ework/http/server/reactive/ServletHttpHandlerAdapter.java
+46
-0
spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java
...mework/http/server/reactive/ServletServerHttpRequest.java
+7
-0
spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java
...ework/http/server/reactive/ServletServerHttpResponse.java
+16
-1
未找到文件。
spring-web/src/main/java/org/springframework/http/server/reactive/AbstractResponseBodyFlushProcessor.java
浏览文件 @
8eeda746
...
...
@@ -120,7 +120,7 @@ abstract class AbstractResponseBodyFlushProcessor implements Processor<Publisher
}
pr
ivate
void
cancel
()
{
pr
otected
void
cancel
()
{
this
.
subscription
.
cancel
();
}
...
...
spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java
浏览文件 @
8eeda746
...
...
@@ -18,6 +18,8 @@ package org.springframework.http.server.reactive;
import
java.io.IOException
;
import
javax.servlet.AsyncContext
;
import
javax.servlet.AsyncEvent
;
import
javax.servlet.AsyncListener
;
import
javax.servlet.ServletException
;
import
javax.servlet.annotation.WebServlet
;
import
javax.servlet.http.HttpServlet
;
...
...
@@ -89,6 +91,7 @@ public class ServletHttpHandlerAdapter extends HttpServlet {
servletRequest
,
this
.
dataBufferFactory
,
this
.
bufferSize
);
ServletServerHttpResponse
response
=
new
ServletServerHttpResponse
(
servletResponse
,
this
.
dataBufferFactory
,
this
.
bufferSize
);
asyncContext
.
addListener
(
new
ErrorHandlingAsyncListener
(
request
,
response
));
HandlerResultSubscriber
resultSubscriber
=
new
HandlerResultSubscriber
(
asyncContext
);
this
.
handler
.
handle
(
request
,
response
).
subscribe
(
resultSubscriber
);
}
...
...
@@ -127,4 +130,47 @@ public class ServletHttpHandlerAdapter extends HttpServlet {
}
}
private
static
final
class
ErrorHandlingAsyncListener
implements
AsyncListener
{
private
final
ServletServerHttpRequest
request
;
private
final
ServletServerHttpResponse
response
;
public
ErrorHandlingAsyncListener
(
ServletServerHttpRequest
request
,
ServletServerHttpResponse
response
)
{
this
.
request
=
request
;
this
.
response
=
response
;
}
@Override
public
void
onTimeout
(
AsyncEvent
event
)
{
Throwable
ex
=
event
.
getThrowable
();
if
(
ex
==
null
)
{
ex
=
new
IllegalStateException
(
"Async operation timeout."
);
}
this
.
request
.
handleAsyncListenerError
(
ex
);
this
.
response
.
handleAsyncListenerError
(
ex
);
}
@Override
public
void
onError
(
AsyncEvent
event
)
{
this
.
request
.
handleAsyncListenerError
(
event
.
getThrowable
());
this
.
response
.
handleAsyncListenerError
(
event
.
getThrowable
());
}
@Override
public
void
onStartAsync
(
AsyncEvent
event
)
{
// no op
}
@Override
public
void
onComplete
(
AsyncEvent
event
)
{
// no op
}
}
}
spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java
浏览文件 @
8eeda746
...
...
@@ -170,6 +170,13 @@ public class ServletServerHttpRequest extends AbstractServerHttpRequest {
}
}
/** Handle a timeout/error callback from the Servlet container */
void
handleAsyncListenerError
(
Throwable
ex
)
{
if
(
this
.
bodyPublisher
!=
null
)
{
this
.
bodyPublisher
.
onError
(
ex
);
}
}
private
RequestBodyPublisher
createBodyPublisher
()
throws
IOException
{
RequestBodyPublisher
bodyPublisher
=
new
RequestBodyPublisher
(
this
.
request
.
getInputStream
(),
this
.
dataBufferFactory
,
this
.
bufferSize
);
...
...
spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java
浏览文件 @
8eeda746
...
...
@@ -54,6 +54,8 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons
private
volatile
ResponseBodyProcessor
bodyProcessor
;
private
volatile
ResponseBodyFlushProcessor
bodyFlushProcessor
;
public
ServletServerHttpResponse
(
HttpServletResponse
response
,
DataBufferFactory
dataBufferFactory
,
int
bufferSize
)
throws
IOException
{
...
...
@@ -116,8 +118,9 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons
@Override
protected
Processor
<
Publisher
<
DataBuffer
>,
Void
>
createBodyFlushProcessor
()
{
Processor
<
Publisher
<
DataBuffer
>,
Void
>
processor
=
new
ResponseBodyFlushProcessor
();
ResponseBodyFlushProcessor
processor
=
new
ResponseBodyFlushProcessor
();
registerListener
();
bodyFlushProcessor
=
processor
;
return
processor
;
}
...
...
@@ -151,6 +154,18 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons
}
}
/** Handle a timeout/error callback from the Servlet container */
void
handleAsyncListenerError
(
Throwable
ex
)
{
if
(
this
.
bodyFlushProcessor
!=
null
)
{
this
.
bodyFlushProcessor
.
cancel
();
this
.
bodyFlushProcessor
.
onError
(
ex
);
}
if
(
this
.
bodyProcessor
!=
null
)
{
this
.
bodyProcessor
.
cancel
();
this
.
bodyProcessor
.
onError
(
ex
);
}
}
private
class
ResponseBodyProcessor
extends
AbstractResponseBodyProcessor
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录