Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
KnowledgePlanet
road-map
xfg-dev-tech-dubbo
提交
12483ea7
xfg-dev-tech-dubbo
项目概览
KnowledgePlanet
/
road-map
/
xfg-dev-tech-dubbo
通知
487
Star
22
Fork
16
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
xfg-dev-tech-dubbo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
12483ea7
编写于
7月 08, 2023
作者:
小傅哥
⛹
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 模拟RPC请求
上级
e3e518b9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
83 addition
and
0 deletion
+83
-0
xfg-dev-tech-dubbo-trigger/src/main/java/cn/bugstack/dev/tech/dubbo/trigger/socket/RpcServerSocket.java
...gstack/dev/tech/dubbo/trigger/socket/RpcServerSocket.java
+83
-0
未找到文件。
xfg-dev-tech-dubbo-trigger/src/main/java/cn/bugstack/dev/tech/dubbo/trigger/socket/RpcServerSocket.java
0 → 100644
浏览文件 @
12483ea7
package
cn.bugstack.dev.tech.dubbo.trigger.socket
;
import
com.alibaba.fastjson.JSON
;
import
io.netty.bootstrap.ServerBootstrap
;
import
io.netty.channel.*
;
import
io.netty.channel.nio.NioEventLoopGroup
;
import
io.netty.channel.socket.SocketChannel
;
import
io.netty.channel.socket.nio.NioServerSocketChannel
;
import
io.netty.handler.codec.serialization.ClassResolvers
;
import
io.netty.handler.codec.serialization.ObjectDecoder
;
import
io.netty.handler.codec.serialization.ObjectEncoder
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.stereotype.Service
;
import
java.lang.reflect.Method
;
import
java.util.HashMap
;
import
java.util.Map
;
@Slf4j
@Service
public
class
RpcServerSocket
implements
Runnable
{
private
ApplicationContext
applicationContext
;
public
RpcServerSocket
(
ApplicationContext
applicationContext
)
{
this
.
applicationContext
=
applicationContext
;
new
Thread
(
this
).
start
();
}
@Override
public
void
run
()
{
EventLoopGroup
bossGroup
=
new
NioEventLoopGroup
();
EventLoopGroup
workerGroup
=
new
NioEventLoopGroup
();
try
{
ServerBootstrap
b
=
new
ServerBootstrap
();
b
.
group
(
bossGroup
,
workerGroup
)
.
channel
(
NioServerSocketChannel
.
class
)
.
option
(
ChannelOption
.
SO_BACKLOG
,
128
)
.
childHandler
(
new
ChannelInitializer
<
SocketChannel
>()
{
@Override
public
void
initChannel
(
SocketChannel
channel
)
{
channel
.
pipeline
().
addLast
(
new
ObjectEncoder
());
channel
.
pipeline
().
addLast
(
new
ObjectDecoder
(
ClassResolvers
.
cacheDisabled
(
null
)));
channel
.
pipeline
().
addLast
(
new
SimpleChannelInboundHandler
<
Map
<
String
,
Object
>>()
{
@Override
protected
void
channelRead0
(
ChannelHandlerContext
channelHandlerContext
,
Map
<
String
,
Object
>
request
)
throws
Exception
{
// 解析参数
Class
<?>
clazz
=
(
Class
<?>)
request
.
get
(
"clazz"
);
String
methodName
=
(
String
)
request
.
get
(
"methodName"
);
Class
<?>[]
paramTypes
=
(
Class
<?>[])
request
.
get
(
"paramTypes"
);
Object
[]
args
=
(
Object
[])
request
.
get
(
"args"
);
// 反射调用
Method
method
=
clazz
.
getMethod
(
methodName
,
paramTypes
);
Object
invoke
=
method
.
invoke
(
applicationContext
.
getBean
(
clazz
),
args
);
// 封装结果
Map
<
String
,
Object
>
response
=
new
HashMap
<>();
response
.
put
(
"data"
,
invoke
);
log
.
info
(
"RPC 请求调用 clazz:{} methodName:{}, response:{}"
,
clazz
,
methodName
,
JSON
.
toJSON
(
response
));
// 回写数据
channelHandlerContext
.
channel
().
writeAndFlush
(
response
);
}
});
}
});
ChannelFuture
f
=
b
.
bind
(
22881
).
sync
();
f
.
channel
().
closeFuture
().
sync
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
bossGroup
.
shutdownGracefully
();
workerGroup
.
shutdownGracefully
();
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录