netty是一个提供异步事件驱动的网络应用程序框架和工具,用以快速开发高性能高可靠性的服务器和客户端程序。预计现在的项目马上要升级为分布式模式,所以打算学习下netty,看看该框架是否可以给项目带来好处。
跟学习很多框架一样,首先跑通一个hello world程序,代码的功能很简单,首先启动服务器端程序,然后启动的客户端程序,服务器接受客户端连接,返回字符串“hello, netty中午呢”,客户端打印返回的字符串,然后关闭连接。
服务器端代码:
public class HelloServer { public void run() throws InterruptedException { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new HelloServerHandler()); } }) .option(ChannelOption.SO_BACKLOG, 128) .childOption(ChannelOption.SO_KEEPALIVE, true); ChannelFuture f = b.bind(7777).sync(); f.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } public static void main(String[] args) throws Exception { new HelloServer().run(); } } public class HelloServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelActive(final ChannelHandlerContext ctx) throws Exception { char[] msg = "hello, netty中午呢".toCharArray(); final ByteBuf buf = ctx.alloc().buffer(msg.length); for (char c : msg) { buf.writeChar(c); } final ChannelFuture f = ctx.writeAndFlush(buf); f.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { assert f == future; ctx.close(); } }); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { //打印异常信息并关闭连接 cause.printStackTrace(); ctx.close(); } }
客户端代码:
public class HelloClient { public static void main(String[] args) throws InterruptedException { EventLoopGroup workerGroup = new NioEventLoopGroup(); try { Bootstrap b = new Bootstrap(); b.group(workerGroup) .channel(NioSocketChannel.class) .option(ChannelOption.SO_KEEPALIVE, true) .handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new HelloClientHandler()); } }); ChannelFuture f = b.connect("127.0.0.1", 7777).sync(); f.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); } } } public class HelloClientHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf buf = (ByteBuf) msg; while (buf.isReadable()) { System.out.print(buf.readChar()); System.out.flush(); } buf.release(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { cause.printStackTrace(); ctx.close(); } }
相关推荐
Netty 框架学习 —— 第一个 Netty 应用(csdn)————程序
Netty之helloworld示列,客户端,服务器示列代码,欢迎初学者学习。
Netty入门,HelloWorld Demo 以及实现了心跳机制的HeartBeat Demo
netty4.x的hello world 范例,可以运行,直接导入工程,需要依赖包netty-all-4.0.25.final.jar,可以去MAVEN仓库下载或者百度下载。
Netty 框架学习 —— 编解码器框架(csdn)————程序
Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍示例代码;Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍示例代码
Netty 框架学习 —— 预置的 ChannelHandler 和编解码器(csdn)————程序
《Netty最佳实践》——《Netty实战》补遗-Netty-Best-Practices
网络编程之Netty一站式精讲.rar
在对通信模型有了基本的认识时,学习到的仅仅是一个模型,如果想把这些真正的用于实际工作中,那么还需要不断的完善、扩展和优化。比如经典的TCP读包写包问题,或者是数据接收的大小,实际的通信处理与应答的处理...
厉害了,Netty 轻松实现文件上传!(csdn)————程序
Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端:https://azhon.blog.csdn.net/article/details/100569489 Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的...
通过视频和代码简单介绍了如何搭建一个netty服务,以及netty服务的一些讲解
cassandra-netty-rest-simple 集成了Cassandra,Netty和JBoss RESTEasy的简单应用程序。 它提供了一个Hello World REST Web服务,可以通过。 调用服务时,它将Person的实例持久化到名为DEMO的Cassandra键空间中。
Netty4事件处理传播机制,java高级开发工程师要求(csdn)————程序
近百节视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效...2. Hello World 3. 组件 4. 双向通信 三. Netty 进阶 1. 粘包与半包 2. 协议设计与解析 3. 聊天室案例 四. 优化与源码 1. 优化 2. 源码分析
第1章 Netty——异步和事件驱动 第2章 你的第一款Netty应用程序 第3章 Netty的组件和设计 第4章 传输 第5章 ByteBuf 第6章 ChannelHandler和ChannelPipeline 第7章 EventLoop和线程模型 第8章 引导 第9章 ...
Netty 是一个基于NIO的客户端、服务端的编程框架,使用Netty可以确保你快速和简单的开发出一个网络应用,Netty相当于简化和流线化了网络应用的编程开发过程,Netty提供异步的、事件驱动的网络应用程序框架和工具,用...
实战方面,从第一个Netty入门程序到私有协议栈的设计和开发,通过实际例程,由浅入深地对Netty的核心API和类库的功能和用法进行了细致讲解。本书适合架构师、设计师、软件开发工程师、测试人员和其他对Java NIO框架...