我应该把业务逻辑放在 netty4 的什么地方?在 chanelRead0() 或 运行 一个任务?

where should I put business logic in netty4? In chanelRead0() or run a task?

我应该把业务逻辑放在netty4的什么地方?

我应该将我的代码放在 @Override channelRead0() 或 运行 中的任务中吗? 我知道这两者都会 运行 进入同一个 IO eventLoop,但它们之间有什么区别?哪个更好?

解决方案 1:

@Override 
channelRead0(){
    business code;
}

解决方案 2:

@Override 
channelRead0(){
    ctx.executor().submit(new task(){business code});
    //or ctx.channel().eventLoop().submit(new task(){business code});
}

只要您不使用任何阻塞操作(例如从数据库读取)channelRead0 就完全没问题。一般来说,由您决定。 Submit 方法更适用于需要执行异步操作或定时事件的情况。对于阻塞事件,最好创建单独的执行程序。