netty框架的编程风格和异步回调就很相似了。。。。
首先还是先入门netty吧,从简单的一点一点来。。。
直接上代码吧。。。:
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
public class NettyServer {
public void run() throws Exception {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup); //前者用来处理accept事件,后者用于处理已经建立的连接的io
b.channel(NioServerSocketChannel.class); //用它来建立新accept的连接
b.childHandler(new ChannelInitializer<SocketChannel>(){
@Override //当新连接accept的时候,这个方法会调用
protected void initChannel(SocketChannel ch) throws Exception {
// TODO Auto-generated method stub
ch.pipeline().addLast(new MyChannelHandler());
}
});
ChannelFuture f = b.bind(80).sync(); //在所有的网卡上监听这个端口
f.channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
public static void main(String args[]) throws Exception {
new NettyServer().run();
}
}
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundByteHandlerAdapter;
public class MyChannelHandler extends ChannelInboundByteHandlerAdapter {
@Override
protected void inboundBufferUpdated(ChannelHandlerContext ctx, ByteBuf in)
throws Exception {
// TODO Auto-generated method stub
while (in.isReadable()) {
System.out.print((char)in.readByte());
}
}
}
代码相对来说还是比较简单的吧,这里也是通过事件回调来实现的。。。估计所有的io方面的编程,如果想要性能比较好也就只有这种方法吧,毕竟同步的编程方式虽然好理解但是就不得不牺牲一些其余的东西了。。。