V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
narutow
V2EX  ›  Java

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

  •  
  •   narutow · 2021-03-23 19:47:13 +08:00 · 2109 次点击
    这是一个创建于 1370 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    public final class GameServerHandler extends SimpleChannelInboundHandler<MsgType> {
        @Override
        protected void channelRead0(ChannelHandlerContext channelHandlerContext, MsgType s)
    
    1. MsgType里继续耕耘!
    2. 新开一个服务, 就有新的 pipeline 了!
    8 条回复    2021-03-28 01:02:47 +08:00
    araaaa
        1
    araaaa  
       2021-03-23 19:56:01 +08:00 via iPhone
    json 或者 pb
    iuh
        2
    iuh  
       2021-03-23 20:00:57 +08:00
    用新的 handler 接受处理,加入流水线
    narutow
        3
    narutow  
    OP
       2021-03-23 20:06:48 +08:00
    @iuh Handler 之间不应该是强相关的吗, 只有一个流水线, handler 都挂在流水线里, 消息处理存在顺序. A-> B -> C, C 只能接受 B 解完包的数据
    sagaxu
        4
    sagaxu  
       2021-03-23 20:14:41 +08:00 via Android   ❤️ 3
    通信层和业务逻辑解藕,只做收发,消息类型只有一种,不同类型交给业务逻辑去做
    tookbra
        5
    tookbra  
       2021-03-23 20:39:07 +08:00
    再 handler 前加个 codec 解码、编码,对应的事件转发到对应的 codec 中处理
    jianglai
        6
    jianglai  
       2021-03-23 21:10:14 +08:00 via iPhone
    @narutow 如果一个 handler 不能处理某种 message type 就直接 pass 到 pipeline 里面的下一个去,不会被 swallow 的。
    securityCoding
        7
    securityCoding  
       2021-03-24 09:41:49 +08:00 via Android
    参考一下 rocketmq 的 netty 代码,收发跟业务处理分离开来
    cubecube
        8
    cubecube  
       2021-03-28 01:02:47 +08:00
    @narutow en/decoder 可以类型匹配 B 也可以不解析,直接给 C
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:16 · PVG 02:16 · LAX 10:16 · JFK 13:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.