
springboot+netty初体验
发布日期:2021-05-27 02:54:19
浏览次数:36
分类:精选文章
本文共 4267 字,大约阅读时间需要 14 分钟。
Netty 是一个高性能、响应式的网络应用框架,基于Java NIO,支持异步、事件驱动的开发。对于Spring Boot项目来说,与Netty的集成是一个非常实用的技能,它能够帮助开发者快速构建高性能网络应用。
依赖管理
在项目中集成Netty,可以通过以下依赖来实现:
io.netty netty-all 4.1.58.Final
服务端实现
以下是一个典型的Netty服务端实现代码示例:
public class NettyServer { private static final Logger logger = LoggerFactory.getLogger(NettyServer.class); public void start(InetSocketAddress socketAddress) { // 配置主线程组 EventLoopGroup bossGroup = new NioEventLoopGroup(1); // 配置工作线程组 EventLoopGroup workGroup = new NioEventLoopGroup(200); ServerBootstrap bootstrap = new ServerBootstrap() .group(bossGroup, workGroup) .channel(NioServerSocketChannel.class) .childHandler(new ServerChannelInitializer()) .localAddress(socketAddress) .option(ChannelOption.SO_BACKLOG, 1024) .childOption(ChannelOption.SO_KEEPALIVE, true); try { ChannelFuture future = bootstrap.bind(socketAddress).sync(); logger.info("服务器已启动并在地址: {}监听", socketAddress); future.channel().closeFuture().sync(); } catch (InterruptedException e) { logger.error("启动Netty服务器时出现异常", e); e.printStackTrace(); } finally { bossGroup.shutdownGracefully(); workGroup.shutdownGracefully(); } }
消息处理类
public class NettyServerHandler extends ChannelInboundHandlerAdapter { private static final Logger logger = LoggerFactory.getLogger(NettyServerHandler.class); @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { logger.debug("服务端接收到了消息: {}", msg); ctx.write("你好啊ipelines!"); ctx.flush(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { logger.error("服务端连接异常", cause); cause.printStackTrace(); ctx.close(); }}
初始化器
public class ServerChannelInitializer extends ChannelInitializer { @Override protected void initChannel(SocketChannel ch) { ch.pipeline().addLast(new StringDecoder(CharsetUtil.UTF_8)); ch.pipeline().addLast(new StringEncoder(CharsetUtil.UTF_8)); ch.pipeline().addLast(new NettyServerHandler()); }}
客户端实现
以下是一个简单的Netty客户端实现代码示例:
public class NettyClient { private static final Logger logger = LoggerFactory.getLogger(NettyClient.class); public void start() { EventLoopGroup group = new NioEventLoopGroup(); Bootstrap bootstrap = new Bootstrap() .group(group) .option(ChannelOption.TCP_NODELAY, true) .channel(NioSocketChannel.class) .handler(new ClientChannelInitializer()); try { ChannelFuture future = bootstrap.connect("127.0.0.1", 8090).sync(); logger.info("客户端连接成功"); // 发送消息 future.channel().writeAndFlush("你好啊服务器画魂!"); // 等待连接关闭 future.channel().closeFuture().sync(); } catch (InterruptedException e) { logger.error("Netty客户端启动异常", e); e.printStackTrace(); } finally { group.shutdownGracefully(); } }
消息处理类
public class NettyClientHandler extends ChannelInboundHandlerAdapter { private static final Logger logger = LoggerFactory.getLogger(NettyClientHandler.class); @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { logger.debug("客户端接收到了消息: {}", msg); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { logger.error("客户端连接异常", cause); cause.printStackTrace(); ctx.close(); }}
初始化器
public class ClientChannelInitializer extends ChannelInitializer { @Override protected void initChannel(SocketChannel ch) { ch.pipeline().addLast(new StringDecoder()); ch.pipeline().addLast(new StringEncoder()); ch.pipeline().addLast(new NettyClientHandler()); }}
运行知识
- 服务端和客户端需要独立运行,即先启动服务端再启动客户端。
- 服务端开始监听指定的端号,客户端则需要连接到相同的端号以建立连接。
- Netty的事件循环机制使得网络通信处理更加高效,并能处理大量连接和数据。
日志输出示例
当服务端和客户端运行时,日志输出会如下:
服务端
服务器已启动并在地址: 127.0.0.1:8090监听服务端Channel active......
客户端
客户端连接成功客户端Channel Active .....客户端收到消息: 您好啊pipeline!
以上代码和描述提供了一个完整的Netty+Spring Boot示例,其中涵盖了服务端和客户端的实现细节,力求简洁明了,同时注重技术细节的展示。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月24日 20时20分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
03-docker容器的基本操作
2023-01-23
03-docker系列-docker容器的基本操作
2023-01-23
04-docker-commit构建自定义镜像
2023-01-23
04-docker系列-commit构建自定义镜像
2023-01-23
05-docker系列-使用dockerfile构建镜像
2023-01-23
05-如何通过Dockerfile实现高效的应用容器化?
2023-01-23
06-docker系列-使用dockerfile构建nginx、redis镜像
2023-01-23
06-使用dockerfile构建nginx、redis镜像
2023-01-23
07-docker系列-使用dockerfile构建python、jenkins镜像
2023-01-23
07-使用dockerfile构建python、jenkins镜像
2023-01-23
08-docker系列-docker网络你了解多少(上)
2023-01-23
09-docker系列-docker网络你了解多少(下)
2023-01-23
1 解决XP重装后原文件夹拒绝访问
2023-01-23
10-docker系列-docker文件共享和特权模式
2023-01-23
#AMBA##AHB总线学习
2023-01-23
#C2#S2.1# 一个简单的UVM验证平台
2023-01-23
#C8# UVM中的factory机制 #S8.1.2# 到底重载?多态?
2023-01-23