netty 异步非阻塞业务逻辑

X1aoHei
  • 1
新手上路,请多包涵

问题描述

netty的ChannelFuture是对jdk的Future进行改进,是我们能够优雅的书写非阻塞的业务逻辑。有的时候我们需要在hanndler的ChannelRead0方法内写异步(自己写一个线程池)的业务逻辑,通过netty提供的EventExecutor的sumbit返回的Future对象,但是这个对象又是jdk的,其get()又是阻塞的,那么如何写一个异步非阻塞的业务逻辑?

回复
阅读 1.7k
1 个回答

可以在初始化ServerBootstrap的时候传入EventExecutorGroup,Handler的逻辑会在这个线程池执行,达到IO线程与业务线程分离的目的

bizGroup = new DefaultEventExecutorGroup(bizThreadNum); 
ServerBootstrap b = new ServerBootstrap(); 

b.childHandler(new ChannelInitializer<SocketChannel>() {     
@Override 
public void initChannel(SocketChannel ch) throws Exception {     
ch.pipeline().addLast(new NettyMessageDecoder());         
ch.pipeline().addLast(bizGroup, new ServerBusinessHandler())); 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏