Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
c3621bf1
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,发现更多精彩内容 >>
提交
c3621bf1
编写于
12月 14, 2016
作者:
R
Rossen Stoyanchev
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1268 from violetagg/undertow-byte-buffer-pool
上级
35eaeb56
d3e05296
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
25 addition
and
7 deletion
+25
-7
spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerReadPublisher.java
...k/http/server/reactive/AbstractListenerReadPublisher.java
+1
-1
spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHttpHandlerAdapter.java
...work/http/server/reactive/UndertowHttpHandlerAdapter.java
+1
-1
spring-web/src/main/java/org/springframework/http/server/reactive/UndertowServerHttpRequest.java
...ework/http/server/reactive/UndertowServerHttpRequest.java
+23
-5
未找到文件。
spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerReadPublisher.java
浏览文件 @
c3621bf1
...
...
@@ -78,7 +78,7 @@ public abstract class AbstractListenerReadPublisher<T> implements Publisher<T> {
* @see ReadListener#onAllDataRead()
* @see org.xnio.ChannelListener#handleEvent(Channel)
*/
public
final
void
onAllDataRead
()
{
public
void
onAllDataRead
()
{
if
(
this
.
logger
.
isTraceEnabled
())
{
this
.
logger
.
trace
(
this
.
state
+
" onAllDataRead"
);
}
...
...
spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHttpHandlerAdapter.java
浏览文件 @
c3621bf1
...
...
@@ -58,7 +58,7 @@ public class UndertowHttpHandlerAdapter extends HttpHandlerAdapterSupport
@Override
public
void
handleRequest
(
HttpServerExchange
exchange
)
throws
Exception
{
ServerHttpRequest
request
=
new
UndertowServerHttpRequest
(
exchange
,
this
.
dataBufferFactory
);
Undertow
ServerHttpRequest
request
=
new
UndertowServerHttpRequest
(
exchange
,
this
.
dataBufferFactory
);
ServerHttpResponse
response
=
new
UndertowServerHttpResponse
(
exchange
,
this
.
dataBufferFactory
);
getHttpHandler
().
handle
(
request
,
response
).
subscribe
(
new
Subscriber
<
Void
>()
{
...
...
spring-web/src/main/java/org/springframework/http/server/reactive/UndertowServerHttpRequest.java
浏览文件 @
c3621bf1
...
...
@@ -21,6 +21,7 @@ import java.net.URI;
import
java.net.URISyntaxException
;
import
java.nio.ByteBuffer
;
import
io.undertow.connector.ByteBufferPool
;
import
io.undertow.connector.PooledByteBuffer
;
import
io.undertow.server.HttpServerExchange
;
import
io.undertow.server.handlers.Cookie
;
...
...
@@ -57,7 +58,7 @@ public class UndertowServerHttpRequest extends AbstractServerHttpRequest {
super
(
initUri
(
exchange
),
initHeaders
(
exchange
));
this
.
exchange
=
exchange
;
this
.
body
=
new
RequestBodyPublisher
(
exchange
,
dataBufferFactory
);
this
.
body
.
registerListener
();
this
.
body
.
registerListener
(
exchange
);
}
private
static
URI
initUri
(
HttpServerExchange
exchange
)
{
...
...
@@ -106,6 +107,7 @@ public class UndertowServerHttpRequest extends AbstractServerHttpRequest {
return
Flux
.
from
(
this
.
body
);
}
private
static
class
RequestBodyPublisher
extends
AbstractListenerReadPublisher
<
DataBuffer
>
{
private
final
ChannelListener
<
StreamSourceChannel
>
readListener
=
...
...
@@ -118,17 +120,22 @@ public class UndertowServerHttpRequest extends AbstractServerHttpRequest {
private
final
DataBufferFactory
dataBufferFactory
;
private
final
PooledByteBuffer
pooledByteBuffer
;
private
final
ByteBufferPool
byteBufferPool
;
private
PooledByteBuffer
pooledByteBuffer
;
public
RequestBodyPublisher
(
HttpServerExchange
exchange
,
DataBufferFactory
dataBufferFactory
)
{
this
.
requestChannel
=
exchange
.
getRequestChannel
();
this
.
pooledByteBuffer
=
exchange
.
getConnection
().
getByteBufferPool
().
allocate
();
this
.
byteBufferPool
=
exchange
.
getConnection
().
getByteBufferPool
();
this
.
dataBufferFactory
=
dataBufferFactory
;
}
private
void
registerListener
()
{
private
void
registerListener
(
HttpServerExchange
exchange
)
{
exchange
.
addExchangeCompleteListener
((
ex
,
next
)
->
{
onAllDataRead
();
next
.
proceed
();
});
this
.
requestChannel
.
getReadSetter
().
set
(
this
.
readListener
);
this
.
requestChannel
.
getCloseSetter
().
set
(
this
.
closeListener
);
this
.
requestChannel
.
resumeReads
();
...
...
@@ -141,6 +148,9 @@ public class UndertowServerHttpRequest extends AbstractServerHttpRequest {
@Override
protected
DataBuffer
read
()
throws
IOException
{
if
(
this
.
pooledByteBuffer
==
null
)
{
this
.
pooledByteBuffer
=
this
.
byteBufferPool
.
allocate
();
}
ByteBuffer
byteBuffer
=
this
.
pooledByteBuffer
.
getBuffer
();
int
read
=
this
.
requestChannel
.
read
(
byteBuffer
);
if
(
logger
.
isTraceEnabled
())
{
...
...
@@ -157,6 +167,14 @@ public class UndertowServerHttpRequest extends AbstractServerHttpRequest {
return
null
;
}
@Override
public
void
onAllDataRead
()
{
if
(
this
.
pooledByteBuffer
!=
null
&&
this
.
pooledByteBuffer
.
isOpen
())
{
this
.
pooledByteBuffer
.
close
();
}
super
.
onAllDataRead
();
}
private
class
ReadListener
implements
ChannelListener
<
StreamSourceChannel
>
{
@Override
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录