1、Netty软件包下载:http://netty.io/downloads.html,本示例基于netty-5.0.0.Alpha2.tar.bz2
2、搭建Netty应用工程
使用eclipse创建一个java工程,新建lib文件夹并将netty-all-5.0.0.Alpha2.jar复制到该文件夹下,然后将jar引入工程。
3、Netty服务端开发
TimeServer.java
package com.neety; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; 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 TimeServer { public void bind(int port)throws Exception{ //配置服务端Nio线程组 EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try{ ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 1024) //.childHandler(new TimeServerHandler()); .childHandler(new ChildChannelHandler()); //绑定端口,同步等待成功 ChannelFuture f = b.bind(port).sync(); //等待服务端监听端口关闭 f.channel().closeFuture().sync(); }finally{ //退出时释放资源 bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } private class ChildChannelHandler extends ChannelInitializer<SocketChannel>{ @Override protected void initChannel(SocketChannel channel) throws Exception { channel.pipeline().addLast(new TimeServerHandler()); } } public static void main(String[] args) throws Exception{ int port = 8083; if(args!=null && args.length > 0){ port = Integer.valueOf(args[0]); } new TimeServer().bind(port); } }
TimeServerHandler.java
package com.neety; import java.util.Date; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; public class TimeServerHandler extends ChannelHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { //super.channelRead(ctx, msg); ByteBuf buf = (ByteBuf) msg; byte [] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req,"UTF-8"); System.out.println("The time server receive order:"+body); String currentTime = "query time order".equalsIgnoreCase(body)?new Date( System.currentTimeMillis()).toString():"bad order"; ByteBuf resp = Unpooled.copiedBuffer(currentTime.getBytes()); ctx.write(resp); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { //super.channelReadComplete(ctx); ctx.flush(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { //super.exceptionCaught(ctx, cause); ctx.close(); } }
4、Netty客户端开发
TimeClient.java
package com.neety; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; public class TimeClient { public void connect(int port,String host)throws Exception{ //配置客户端NIO线程组 EventLoopGroup group = new NioEventLoopGroup(); try{ Bootstrap b = new Bootstrap(); b.group(group).channel(NioSocketChannel.class) .option(ChannelOption.TCP_NODELAY, true) .handler(new ChannelInitializer<SocketChannel>() { protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new TimeClientHandler()); }; }); //发起异步连接操作 ChannelFuture f = b.connect(host,port).sync(); //等待客户端链路关闭 f.channel().closeFuture().sync(); }finally{ //退出,释放资源 group.shutdownGracefully(); } } public static void main(String[] args)throws Exception { int port = 8083; if(args!=null && args.length > 0){ port = Integer.valueOf(args[0]); } new TimeClient().connect(port, "127.0.0.1"); } }
TimeClientHandler.java
package com.neety; import java.util.logging.Logger; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; /** * * @author Administrator * */ public class TimeClientHandler extends ChannelHandlerAdapter { private static final Logger logger = Logger.getLogger(TimeClientHandler.class.getName()); private final ByteBuf firstMessage; public TimeClientHandler() { byte [] req = "query time order".getBytes(); firstMessage = Unpooled.buffer(req.length); firstMessage.writeBytes(req); } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { //super.channelActive(ctx); ctx.writeAndFlush(firstMessage); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { //super.channelRead(ctx, msg); ByteBuf buf = (ByteBuf)msg; byte [] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req, "UTF-8"); System.out.println("now is :"+body); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { //super.exceptionCaught(ctx, cause); logger.warning("unexpected exception from downstream:"+ cause.getMessage()); ctx.close(); } }
OVER
相关推荐
本工程采用maven+netty4.1.0+PrefixedStringDecoder+json技术,包括客户端和服务端。先运行服务端SampleServer,再去等客户端SampleClient。示例中发的是心跳包,其中消息格式定义为msgType + msgNo + content(json...
通过实践这些Netty入门示例,你将能够掌握如何构建基本的服务器和客户端,理解异步通信的工作原理,以及如何利用Netty的强大功能来优化网络应用。不断练习和深入学习,你将在网络编程领域变得更加熟练。
在学习"Netty入门Reactor示例"时,你可以按照以下步骤进行: 1. **创建服务器端:** - 首先,你需要创建一个ServerBootstrap实例,配置BossGroup和WorkerGroup。 - 然后,添加自定义的...
这个教程将引导我们入门 Netty 编码,让我们深入理解其核心概念和实际应用。 首先,Netty 的核心是其设计模式,即 Reactor 模式,也称为事件驱动模型。Reactor 模式允许 Netty 高效地处理大量并发连接,通过非阻塞 ...
这个"netty案例.zip"压缩包提供了一个简单的Netty入门示例,帮助初学者理解如何使用Netty进行网络编程。下面将详细解释这个案例中的核心知识点。 1. **Netty基础架构**: Netty采用了Reactor模式,它是一种处理...
这个“netty入门案例.zip”文件提供了一个简单的 Netty 应用示例,旨在帮助初学者快速理解并掌握 Netty 的基本概念和使用方法。下面将详细介绍这个入门案例中的关键知识点。 首先,Netty 的核心是其 ChannelHandler...
一个最简单的netty应用 使用:运行EchoServer,打开cmd命令窗口。输入telnet localhost 8080.成功连接后,输入字符,可在ide的控制台输出。 3.第二个示例 com.time’ Netty服务端与客户端,数据的发送与接收 ...
这个“netty入门与实战-netty-learn.zip”文件包含了学习 Netty 的资源,帮助初学者理解并掌握这个强大的网络库。Netty-learn-master 可能是一个包含源代码、教程文档或者示例项目的目录。 Netty 的核心概念: 1. ...
这个压缩包“掘金-Netty 入门与实战-netty-demo.zip”包含了关于 Netty 的入门教程和实战示例,特别是通过 "netty-demo-pipeline-channelHandler" 这个文件名我们可以推测,它可能包含了一个展示 Netty ...
"Netty 入门经典例子" Netty 是一个异步的、事件驱动的网络编程框架和工具,使用 Netty 可以快速开发出可维护的、high-performance 的协议服务及其客户端应用。Netty 相当简化和流线化了网络应用的编程开发过程,...
这个入门项目是学习WebSocket与Netty结合的一个好起点,通过实际操作,你可以更深入地理解WebSocket协议的工作原理,以及如何使用Netty构建高效稳定的WebSocket服务器。同时,对于前端开发人员,这也是一个了解...
压缩包中的 "netty-final" 文件可能是示例代码的最终版本,包含了完成的 Netty 应用程序。你可以通过阅读这些代码来进一步理解 Netty 的实际使用。在源码中,你会看到如何配置 Bootstrap,设置 ChannelPipeline,...
这个“Netty 快速入门教程9集共12集”提供了宝贵的资源,帮助初学者深入理解并掌握Netty的核心概念和用法。 在本教程中,你将学习到以下关键知识点: 1. **Netty基础架构**:了解Netty的基本组件,如BossGroup、...
在本文中,我们将深入探讨Netty 5的三个基础示例,帮助初学者快速上手。 首先,让我们了解Netty的核心概念。Netty基于非阻塞I/O模型,使用Java NIO(Non-blocking Input/Output)库,这使得它在处理大量并发连接时...
四、Netty 示例项目与实战 资源包中可能包含 Netty 实例代码,这些代码可以帮助我们更好地理解 Netty 在实际项目中的应用。例如,你可以找到简单的 HTTP 服务器、WebSocket 服务、FTP 服务器或者自定义通信协议的...
Netty 是一个高性能、异步事件驱动的网络...这只是一个入门级的实例,实际应用中,Netty 可以处理更复杂的网络通信需求,如WebSocket、HTTP 协议等。不断学习和实践,你将能掌握更多关于 Netty 的高级特性和优化技巧。
该入门示例程序是异步、基于事件驱动的网络通讯框架,对于java开发入门以及netty开发入门程序员有极大的学习效果和提升作用。异步:支持多个请求同时处理 响应通过回调函数处理 例如ajax 事件驱动 :比如客户端对...
7. **实战演练**:教程可能包含了一些实战示例,如创建一个简单的Netty服务器和客户端,通过实际操作来加深对Netty线程模型的理解。 总之,这个Netty快速入门教程通过讲解线程模型,将帮助学习者掌握Netty的核心...
这个“Netty 从入门到精通所有代码”压缩包包含了一系列的示例代码,帮助开发者逐步理解并掌握 Netty 的核心概念和实际应用。 1. **Netty 基本概念** - **NIO (Non-blocking I/O)**:Netty 是基于 Java NIO 构建的...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个“netty官方例子”压缩包提供了一系列的...同时,这些例子也适用于初学者入门,帮助他们快速上手Netty框架。