Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
touzizhuo03
Dubbo
提交
52c36be5
D
Dubbo
项目概览
touzizhuo03
/
Dubbo
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Dubbo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
52c36be5
编写于
7月 06, 2012
作者:
K
kimi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
DUBBO-8 Codec线程模型优化,如果流中有多个message则在一次decode中把这些message全都decode
上级
fec02024
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
110 addition
and
49 deletion
+110
-49
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandler.java
...bo/remoting/exchange/support/header/HeartbeatHandler.java
+3
-19
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/transport/AbstractChannelHandlerDelegate.java
...bo/remoting/transport/AbstractChannelHandlerDelegate.java
+46
-0
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/transport/DecodeHandler.java
...a/com/alibaba/dubbo/remoting/transport/DecodeHandler.java
+2
-28
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/transport/MultiMessageHandler.java
...alibaba/dubbo/remoting/transport/MultiMessageHandler.java
+33
-0
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/transport/dispather/ChannelHandlers.java
...a/dubbo/remoting/transport/dispather/ChannelHandlers.java
+3
-2
dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java
...java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java
+23
-0
未找到文件。
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/exchange/support/header/HeartbeatHandler.java
浏览文件 @
52c36be5
...
...
@@ -23,12 +23,12 @@ import com.alibaba.dubbo.remoting.ChannelHandler;
import
com.alibaba.dubbo.remoting.RemotingException
;
import
com.alibaba.dubbo.remoting.exchange.Request
;
import
com.alibaba.dubbo.remoting.exchange.Response
;
import
com.alibaba.dubbo.remoting.transport.ChannelHandlerDelegate
;
import
com.alibaba.dubbo.remoting.transport.
Abstract
ChannelHandlerDelegate
;
/**
* @author <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a>
*/
public
class
HeartbeatHandler
implements
ChannelHandlerDelegate
{
public
class
HeartbeatHandler
extends
Abstract
ChannelHandlerDelegate
{
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
HeartbeatHandler
.
class
);
...
...
@@ -36,20 +36,8 @@ public class HeartbeatHandler implements ChannelHandlerDelegate {
public
static
String
KEY_WRITE_TIMESTAMP
=
"WRITE_TIMESTAMP"
;
private
ChannelHandler
handler
;
public
HeartbeatHandler
(
ChannelHandler
handler
)
{
if
(
handler
==
null
)
{
throw
new
IllegalArgumentException
(
"handler == null"
);
}
this
.
handler
=
handler
;
}
public
ChannelHandler
getHandler
()
{
if
(
handler
instanceof
ChannelHandlerDelegate
)
{
return
((
ChannelHandlerDelegate
)
handler
).
getHandler
();
}
return
handler
;
super
(
handler
);
}
public
void
connected
(
Channel
channel
)
throws
RemotingException
{
...
...
@@ -100,10 +88,6 @@ public class HeartbeatHandler implements ChannelHandlerDelegate {
handler
.
received
(
channel
,
message
);
}
public
void
caught
(
Channel
channel
,
Throwable
exception
)
throws
RemotingException
{
handler
.
caught
(
channel
,
exception
);
}
private
void
setReadTimestamp
(
Channel
channel
)
{
channel
.
setAttribute
(
KEY_READ_TIMESTAMP
,
System
.
currentTimeMillis
());
}
...
...
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/transport/AbstractChannelHandlerDelegate.java
0 → 100644
浏览文件 @
52c36be5
package
com.alibaba.dubbo.remoting.transport
;
import
com.alibaba.dubbo.common.utils.Assert
;
import
com.alibaba.dubbo.remoting.Channel
;
import
com.alibaba.dubbo.remoting.ChannelHandler
;
import
com.alibaba.dubbo.remoting.RemotingException
;
/**
* @author <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a>
*/
public
abstract
class
AbstractChannelHandlerDelegate
implements
ChannelHandlerDelegate
{
protected
ChannelHandler
handler
;
protected
AbstractChannelHandlerDelegate
(
ChannelHandler
handler
)
{
Assert
.
notNull
(
handler
,
"handler == null"
);
this
.
handler
=
handler
;
}
public
ChannelHandler
getHandler
()
{
if
(
handler
instanceof
ChannelHandlerDelegate
)
{
((
ChannelHandlerDelegate
)
handler
).
getHandler
();
}
return
handler
;
}
public
void
connected
(
Channel
channel
)
throws
RemotingException
{
handler
.
connected
(
channel
);
}
public
void
disconnected
(
Channel
channel
)
throws
RemotingException
{
handler
.
disconnected
(
channel
);
}
public
void
sent
(
Channel
channel
,
Object
message
)
throws
RemotingException
{
handler
.
sent
(
channel
,
message
);
}
public
void
received
(
Channel
channel
,
Object
message
)
throws
RemotingException
{
handler
.
received
(
channel
,
message
);
}
public
void
caught
(
Channel
channel
,
Throwable
exception
)
throws
RemotingException
{
handler
.
caught
(
channel
,
exception
);
}
}
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/transport/DecodeHandler.java
浏览文件 @
52c36be5
...
...
@@ -29,34 +29,12 @@ import com.alibaba.dubbo.remoting.exchange.Response;
/**
* @author <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a>
*/
public
class
DecodeHandler
implements
ChannelHandlerDelegate
{
public
class
DecodeHandler
extends
Abstract
ChannelHandlerDelegate
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
DecodeHandler
.
class
);
private
ChannelHandler
handler
;
public
DecodeHandler
(
ChannelHandler
handler
)
{
Assert
.
notNull
(
handler
,
"handler == null"
);
this
.
handler
=
handler
;
}
public
ChannelHandler
getHandler
()
{
if
(
handler
instanceof
ChannelHandlerDelegate
)
{
return
((
ChannelHandlerDelegate
)
handler
).
getHandler
();
}
return
handler
;
}
public
void
connected
(
Channel
channel
)
throws
RemotingException
{
handler
.
connected
(
channel
);
}
public
void
disconnected
(
Channel
channel
)
throws
RemotingException
{
handler
.
disconnected
(
channel
);
}
public
void
sent
(
Channel
channel
,
Object
message
)
throws
RemotingException
{
handler
.
sent
(
channel
,
message
);
super
(
handler
);
}
public
void
received
(
Channel
channel
,
Object
message
)
throws
RemotingException
{
...
...
@@ -75,10 +53,6 @@ public class DecodeHandler implements ChannelHandlerDelegate {
handler
.
received
(
channel
,
message
);
}
public
void
caught
(
Channel
channel
,
Throwable
exception
)
throws
RemotingException
{
handler
.
caught
(
channel
,
exception
);
}
private
void
decode
(
Object
message
)
{
if
(
message
!=
null
&&
message
instanceof
Decodeable
)
{
try
{
...
...
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/transport/MultiMessageHandler.java
0 → 100644
浏览文件 @
52c36be5
package
com.alibaba.dubbo.remoting.transport
;
import
java.util.List
;
import
com.alibaba.dubbo.common.logger.Logger
;
import
com.alibaba.dubbo.common.logger.LoggerFactory
;
import
com.alibaba.dubbo.remoting.Channel
;
import
com.alibaba.dubbo.remoting.ChannelHandler
;
import
com.alibaba.dubbo.remoting.RemotingException
;
/**
* @author <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a>
*/
public
class
MultiMessageHandler
extends
AbstractChannelHandlerDelegate
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
MultiMessageHandler
.
class
);
public
MultiMessageHandler
(
ChannelHandler
handler
)
{
super
(
handler
);
}
@Override
public
void
received
(
Channel
channel
,
Object
message
)
throws
RemotingException
{
if
(
message
instanceof
List
)
{
List
list
=
(
List
)
message
;
for
(
Object
obj
:
list
)
{
handler
.
received
(
channel
,
obj
);
}
}
else
{
handler
.
received
(
channel
,
message
);
}
}
}
dubbo-remoting/dubbo-remoting-api/src/main/java/com/alibaba/dubbo/remoting/transport/dispather/ChannelHandlers.java
浏览文件 @
52c36be5
...
...
@@ -21,6 +21,7 @@ import com.alibaba.dubbo.common.extension.ExtensionLoader;
import
com.alibaba.dubbo.remoting.ChannelHandler
;
import
com.alibaba.dubbo.remoting.Dispather
;
import
com.alibaba.dubbo.remoting.exchange.support.header.HeartbeatHandler
;
import
com.alibaba.dubbo.remoting.transport.MultiMessageHandler
;
/**
* @author chao.liuc
...
...
@@ -35,8 +36,8 @@ public class ChannelHandlers {
protected
ChannelHandlers
()
{}
protected
ChannelHandler
wrapInternal
(
ChannelHandler
handler
,
URL
url
)
{
return
new
HeartbeatHandler
(
ExtensionLoader
.
getExtensionLoader
(
Dispather
.
class
)
.
getAdaptiveExtension
().
dispath
(
handler
,
url
));
return
new
MultiMessageHandler
(
new
HeartbeatHandler
(
ExtensionLoader
.
getExtensionLoader
(
Dispather
.
class
)
.
getAdaptiveExtension
().
dispath
(
handler
,
url
))
)
;
}
private
static
ChannelHandlers
INSTANCE
=
new
ChannelHandlers
();
...
...
dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java
浏览文件 @
52c36be5
...
...
@@ -17,6 +17,8 @@ package com.alibaba.dubbo.rpc.protocol.dubbo;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.alibaba.dubbo.common.Constants
;
import
com.alibaba.dubbo.common.URL
;
...
...
@@ -62,6 +64,27 @@ public class DubboCodec extends ExchangeCodec implements Codec {
public
static
final
Class
<?>[]
EMPTY_CLASS_ARRAY
=
new
Class
<?>[
0
];
@Override
public
Object
decode
(
Channel
channel
,
InputStream
is
)
throws
IOException
{
List
<
Object
>
result
=
new
ArrayList
<
Object
>();
do
{
Object
obj
=
super
.
decode
(
channel
,
is
);
if
(
NEED_MORE_INPUT
==
obj
)
{
break
;
}
else
{
result
.
add
(
obj
);
}
}
while
(
true
);
if
(
result
.
isEmpty
())
{
return
NEED_MORE_INPUT
;
}
if
(
result
.
size
()
==
1
)
{
return
result
.
get
(
0
);
}
return
result
;
}
protected
Object
decodeBody
(
Channel
channel
,
InputStream
is
,
byte
[]
header
)
throws
IOException
{
byte
flag
=
header
[
2
],
proto
=
(
byte
)
(
flag
&
SERIALIZATION_MASK
);
Serialization
s
=
CodecSupport
.
getSerialization
(
channel
.
getUrl
(),
proto
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录