Netty实例-简单的服务端-客户端实现,注释详细
原文 http://blog.csdn.net/jiangtao_st/article/details/38116593
1.Netty Server端实现
/** * * <p> * Netty Server Simple * </p> * * @author 卓轩 * @创建时间:2014年7月7日 * @version: V1.0 */ public class NettyServer { private final int port = 8989; @Test public void nettyServer(){ EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(bossGroup,workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 1024) .childHandler(new ChildChannelHandler()); //绑定端口、同步等待 ChannelFuture futrue = serverBootstrap.bind(port).sync(); //等待服务监听端口关闭 futrue.channel().closeFuture().sync(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //退出,释放线程等相关资源 bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } private class ChildChannelHandler extends ChannelInitializer<SocketChannel>{ @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new SimpleServerHandler()); } } }
2.Netty Client 实现
/** * * <p> * NettyClient 实现 * </p> * * @author 卓轩 * @创建时间:2014年7月7日 * @version: V1.0 */ public class NettyClient { public void connect(int port,String host){ EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap bootstrap = new Bootstrap(); bootstrap.group(group) .channel(NioSocketChannel.class) .option(ChannelOption.TCP_NODELAY, true) .handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new SimpleClientHandler()); } }); //发起异步链接操作 ChannelFuture channelFuture = bootstrap.connect(host, port).sync(); channelFuture.channel().closeFuture().sync(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //关闭,释放线程资源 group.shutdownGracefully(); } } @Test public void nettyClient(){ new NettyClient().connect(8989, "localhost"); } }
3.ServerHander 处理程序
/** * * <p> * Server接收消息处理Handler * </p> * * @author 卓轩 * @创建时间:2014年7月7日 * @version: V1.0 */ public class SimpleServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf buf = (ByteBuf)msg; byte [] req = new byte[buf.readableBytes()]; buf.readBytes(req); String message = new String(req,"UTF-8"); System.out.println("Netty-Server:Receive Message,"+ message); } }
4.ClientHander 处理程序
/** * * <p> * Client Handler * </p> * * @author 卓轩 * @创建时间:2014年7月7日 * @version: V1.0 */ public class SimpleClientHandler extends ChannelInboundHandlerAdapter { private ByteBuf clientMessage; public SimpleClientHandler() { byte [] req = "Call-User-Service".getBytes(); clientMessage = Unpooled.buffer(req.length); clientMessage.writeBytes(req); } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { ctx.writeAndFlush(clientMessage); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf buf = (ByteBuf)msg; byte [] req = new byte[buf.readableBytes()]; buf.readBytes(req); String message = new String(req,"UTF-8"); System.out.println("Netty-Client:Receive Message,"+ message); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { ctx.close(); } }
相关推荐
本实例将详细探讨如何利用这三种技术进行集成,实现高效的双向通信。 首先,Spring框架是Java领域最流行的后端开发框架之一,它提供了丰富的功能和强大的依赖注入机制。在WebSocket方面,Spring提供了一个名为`...
该项目是Socket.IO服务器的开源 Java 实现。基于Netty服务器框架。 根据 Apache License 2.0 获得许可。 支持1.x - 4.x版本的Socket.IO 客户端 支持 xhr 轮询传输 支持websocket传输 支持命名空间和房间 支持ack...
这是一个由本人自己编写的Netty与ProtoBuffer整合在一起的小实例,代码注释很详细,比较适合初学者学习,附带着Netty和ProBuffer有关的最新的jar包,希望对你有所帮助,具体功能是当客户端与服务器端建立连接时,...
"EchoClient.rar" 和 "EchoServer.rar" 可能是两个核心部分,分别代表了Netty中的回声服务端和客户端。 Netty的核心概念之一是它的异步I/O模型,它基于NIO(非阻塞I/O)构建,使得在处理大量并发连接时表现出色。...
这个示例中的详细注释将帮助初学者理解每个部分的作用,包括如何初始化Socket,如何建立连接,如何处理输入输出流,以及如何在WinForm界面中显示和发送消息。通过实际操作和学习此代码,开发者可以掌握Socket通信的...
《基于Java Netty实现的多人联机游戏:客户端与服务器端详解》 在现代的网络游戏开发中,实时性、稳定性和高效性是至关重要的因素,而Java Netty框架以其高性能、易用性和灵活性,成为了构建网络应用的理想选择。本...
在这个实例中,注释可以帮助我们快速掌握Spring、Netty和WebSocket的整合方式。 综上所述,"NettyWebSocket"项目是一个集成了Spring和Netty的WebSocket实例,具备良好的通用性和生产适用性,对于想要学习WebSocket...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个框架广泛应用于大数据、云计算以及分布式系统等领域。在这个例子中,我们将探讨如何利用 Netty 封装 HTTP...
- Netty框架:高性能的异步事件驱动网络应用框架,可能用于构建高效的网络应用服务器。 6. **性能优化与调试** - 网络延迟优化:源码可能包含如何减少网络延迟,提高网络通信效率的策略。 - 错误处理与日志记录...
例如, Ribbon 或者 OpenFeign 可能被用来实现客户端的负载均衡,根据特定策略选择后端服务实例。 5. **日志与监控** 为了保证系统的稳定运行,"wait-side-car"可能会集成日志框架如Log4j或Logback,以及监控工具...
在学习了SpringCloud的各个组件的使用以及研究过相关的原始后,为了更好地理解其内部实现原理,模仿了nacos的部分设计思想,自己实现了该注册中心,代码量4000+,代码中有详细的注释,使用netty实现了服务注册,服务...
普通发送者通过Netty客户端向Broker发送消息,而事务消息发送者需要提供Netty服务端,以供Broker回查本地事务状态。消费者则有推模式和拉模式,消费者组的负载均衡是通过消费者实例的分配策略实现的。 延迟消息是...
最后,Javadoc是Java的文档生成工具,通过在源代码中添加特殊的注释,Javadoc可以自动生成格式化的API文档,帮助开发者理解和使用代码。 总的来说,Java学习资料汇总覆盖了从基础语法、面向对象编程、GUI开发、异常...
每个例子都应有详细的注释,帮助读者理解代码的运行逻辑和目的。 2. **虚拟机**: Java虚拟机(JVM)是Java程序执行的平台。学习JVM的工作原理对于优化Java应用性能至关重要。这部分可能会讲解JVM内存模型(堆、栈...