Netty入门
Netty
- ChannelEvent 某一事件
- ChannelPipeline 管道、传输途径。控制ChannelEvent事件传递和分发
- ChannelHandler 站点处理业务逻辑
- Channel 协调总部门
- EventLoopGroup 线程池调度处理各种数据
DEMO
Server
public class DemoServer {
private static final int port = 8888;
public static void main(String[] args) throws Exception {
EventLoopGroup mainGroup = new NioEventLoopGroup();
EventLoopGroup workGroup = new NioEventLoopGroup();
try{
ServerBootstrap boot = new ServerBootStrap();
//主从Reactor多线程模型
boot.group(mainGroup, workGroup);
//NIO传输
boot.channel(NioServerSocketChannel.class);
//handler处理流程
boot.childHandler(new DemoServerInitializer());
ChannelFuture f = boot.bind(port).sync();
f.channel().closeFuture().sync();
}finally{
mainGroup.shutdownGracefully();
workGroup.shutdownGracefully();
}
}
}
public class DemoServerInitializer extends ChannelInitializer<SocketChannel> {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
//获取pipeline
ChannelPipeline pipeline = socketChannel.pipeline);
//解码器
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8000,Delimiters.lineDelimiter()));
pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encode", new StringEncode());
pipeline.addLast("handler", new DemoHandler());
}
}
public classDemoHandler extends SimpleChannelInboundHandler<String> {
@Override
portected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
System.out.println(ctx.channel().remoteAddress() + "Msg:" + msg);
ctx.writeAndFlush("succ get msg \n");
}
//建立链接时触发
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
ctx.write("welcome to netty \n");
ctx.flush();
super.channelActive(ctx);
}
}
client端
public class DemoClient{
public static final String host = "127.0.0.1";
public static final String port = 8888;
public staic void main(String[] args) throws Exception {
EventLoopGroup group = new NioEventLoopGroup();
try{
BootStrap boot = new BootStrap();
boot.group(group).channel(NioSocketChannel.class).handler(new DemoClientInitializer());
Channel channel = b.connect(host, port).sync().channel();
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
for(;;) {
String line = in.readLine();
if(line == null) {
continue;
}
channel.writeAndFulsh(line + "\r\n");
}
}finally {
group.shutdownGracefully();
}
}
}
public class DemoClientInitializer extends ChannelInitializer<SocketChannel> {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline);
//解码器
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8000,Delimiters.lineDelimiter()));
pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encode", new StringEncode());
pipeline.addLast("handler", new DemoClientHandler());
}
}
public class DemoClientHandler extends SimpleChannelInboundHanlder<String> {
//接收服务端的信息
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, String s) throws Exception {
System.out.println("Server msg : " + s);
}
//连接成功时触发
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("Client connect ");
super.channelActive(ctx);
}
//关闭时触发
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
System.out.println("Client close ");
super.channelInactive(ctx);
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~