Netty 的流水线只能处理一种入站和一种出站消息, 如果我有很多种消息, 怎么样做才能更容易维护?

2021-03-23 19:47:13 +08:00
 narutow

现在MsgType不足以容纳我需求中新的消息类型, 我是在MsgType中继续放数据, 还是再搞一个服务呢? 工程实践中一般采用什么方案捏?

public final class GameServerHandler extends SimpleChannelInboundHandler<MsgType> {
    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, MsgType s)
  1. MsgType里继续耕耘!
  2. 新开一个服务, 就有新的 pipeline 了!
2079 次点击
所在节点    Java
8 条回复
araaaa
2021-03-23 19:56:01 +08:00
json 或者 pb
iuh
2021-03-23 20:00:57 +08:00
用新的 handler 接受处理,加入流水线
narutow
2021-03-23 20:06:48 +08:00
@iuh Handler 之间不应该是强相关的吗, 只有一个流水线, handler 都挂在流水线里, 消息处理存在顺序. A-> B -> C, C 只能接受 B 解完包的数据
sagaxu
2021-03-23 20:14:41 +08:00
通信层和业务逻辑解藕,只做收发,消息类型只有一种,不同类型交给业务逻辑去做
tookbra
2021-03-23 20:39:07 +08:00
再 handler 前加个 codec 解码、编码,对应的事件转发到对应的 codec 中处理
jianglai
2021-03-23 21:10:14 +08:00
@narutow 如果一个 handler 不能处理某种 message type 就直接 pass 到 pipeline 里面的下一个去,不会被 swallow 的。
securityCoding
2021-03-24 09:41:49 +08:00
参考一下 rocketmq 的 netty 代码,收发跟业务处理分离开来
cubecube
2021-03-28 01:02:47 +08:00
@narutow en/decoder 可以类型匹配 B 也可以不解析,直接给 C

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764391

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX