如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。
如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是"Hello world",不过Netty官网的例子却偏偏抛弃了"Hello world"。那我们就自己写一个最简单的"Hello world"的例子,作为上手。
1、首先创建 DiscardServerHandler 服务器端处理消息类:
package com.hpgary.netty4; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.util.CharsetUtil; /** * netty处理消息Handler * */ public class DiscardServerHandler extends SimpleChannelInboundHandler<ByteBuf> { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { System.out.println("异常"); } @Override protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception { /*打印接收的消息*/ System.out.println(msg.toString(CharsetUtil.UTF_8)); /*因为是网络传输,所以使用directBuffer, 使用 PooledByteBufAllocator ByteBuf池创建*/ ByteBuf byteBuf = ctx.alloc().directBuffer(); byteBuf.writeBytes("I got message\n".getBytes()); ctx.writeAndFlush(byteBuf); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { super.channelReadComplete(ctx); } @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { super.channelInactive(ctx); ctx.writeAndFlush("welcome\n"); } @Override public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { } }
2、创建启动类:
package com.hpgary.netty4; import java.net.InetAddress; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.DelimiterBasedFrameDecoder; import io.netty.handler.codec.Delimiters; public class DiscardServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); ServerBootstrap b = new ServerBootstrap(); /** * 这一步是必须的,如果没有设置group将会报java.lang.IllegalStateException: group not * set异常 */ b.group(bossGroup, workerGroup); /** * ServerSocketChannel以NIO的selector为基础进行实现的,用来接收新的连接 * 这里告诉Channel如何获取新的连接. */ b.channel(NioServerSocketChannel.class); /*** * 这里的事件处理类经常会被用来处理一个最近的已经接收的Channel。 * ChannelInitializer是一个特殊的处理类, * 他的目的是帮助使用者配置一个新的Channel。 * 也许你想通过增加一些处理类比如NettyServerHandler来配置一个新的Channel * 或者其对应的ChannelPipeline来实现你的网络程序。 * 当你的程序变的复杂时,可能你会增加更多的处理类到pipline上, * 然后提取这些匿名类到最顶层的类上。 */ b.childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter())); /*如果是传递和接收的是String字符串,就需要配置解压和压缩工具*/ // pipeline.addLast("decoder", new StringDecoder()); // pipeline.addLast("encoder", new StringEncoder()); /*配置接收数据的handler*/ pipeline.addLast("handler", new DiscardServerHandler()); } }); /*服务器端兵丁IP和端口,0.0.0.0表示任何IP都可以链接*/ ChannelFuture future = b.bind(InetAddress.getByName("0.0.0.0"), 8086).sync(); future.channel().closeFuture().sync(); } }
3、创建客户端处理数据handler
package com.hpgary.netty4; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.util.CharsetUtil; public class DiscardClientHandler extends SimpleChannelInboundHandler<ByteBuf> { @Override protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception { System.out.println(msg.toString(CharsetUtil.UTF_8)); } }
4、客户端启动程序
package com.hpgary.netty4; import java.io.BufferedReader; import java.io.InputStreamReader; import org.apache.commons.lang3.StringUtils; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.DelimiterBasedFrameDecoder; import io.netty.handler.codec.Delimiters; public class DiscardClient { public static void main(String[] args) throws Exception { EventLoopGroup workerGroup = new NioEventLoopGroup(); Bootstrap b = new Bootstrap(); b.group(workerGroup); b.channel(NioSocketChannel.class); b.handler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter())); pipeline.addLast("handler", new DiscardClientHandler()); } }); Channel ch = b.connect("127.0.0.1", 8086).sync().channel(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in) ) ; while (true) { String line = in.readLine(); if (line == null) { continue; } ByteBuf buf = Unpooled.directBuffer(128); buf.writeBytes((line + StringUtils.LF).getBytes()); ch.writeAndFlush(buf); } } }
相关推荐
在本示例中,“Netty之helloworld”旨在为初学者提供一个简单的入门教程,帮助理解Netty的工作原理和基本用法。 首先,Netty的核心概念包括Bootstrap(引导类)、Channel(通道)、Handler(处理器)和EventLoop...
在本文中,我们将深入探讨Netty的基本概念,通过“Hello World”范例来理解其工作原理。 首先,让我们理解Netty的核心概念。Netty基于Java NIO(非阻塞I/O)构建,提供了高级API来处理网络通信。它包含以下几个关键...
在这个“Netty HelloWorld + HeartBeat Demo”中,我们将深入理解Netty的基本用法以及如何实现心跳机制。 首先,让我们从Netty HelloWorld Demo开始。这个Demo通常用于展示如何使用Netty创建一个简单的TCP服务器和...
《Netty进阶之路-跟着案例学Netty》是由知名技术专家李林峰撰写的一本专为Java开发者深入理解Netty框架而准备的书籍。这本书旨在通过实例教学,帮助读者全面掌握Netty的核心特性和实战技巧,提升网络编程的能力。 ...
Java进阶技术-netty进阶之路
Netty进阶之路 跟着案例学Netty 整本书无密码,Netty进阶之路 跟着案例学Netty
《Netty进阶之路:跟着案例学Netty》中的案例涵盖了Netty的启动和停止、内存、并发多线程、性能、可靠性、安全等方面,囊括了Netty绝大多数常用的功能及容易让人犯错的地方。在案例的分析过程中,还穿插讲解了Netty...
【Netty 介绍】 Netty 是一款基于 Java NIO 的高性能、易用的网络应用程序框架,主要用于构建服务器和客户端的网络通信系统。Netty 的设计目标是简化网络编程的复杂性,提供高度抽象的API,使得开发者能够快速、...
Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍示例代码;Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍示例代码
《Netty权威指南》是异步非阻塞通信领域的经典之作,基于最新版本Netty 5.0编写,是国内首本深入介绍Netty原理和架构的技术书籍,也是作者多年实战经验的总结和浓缩。在理论方面,讲解了Netty的逻辑架构模型和核心...
在"Netty初步学习-HelloNetty.rar"这个压缩包中,我们可以看到包含"第二课netty服务端"的资源,这表明我们将学习如何构建一个简单的 Netty 服务端。下面将详细解释 Netty 的核心概念和步骤,以帮助你入门。 1. **...
在这个“netty之UDP协议开发”的项目中,我们将探讨如何使用Netty实现基于UDP(用户数据报协议)的应用。 UDP是一种无连接的、不可靠的传输层协议,它不保证数据包的顺序或完整性,但其速度较快,适合于对实时性...
精选自1000多个一线业务实际案例,从原理到实践全景式讲解Netty项目实践,快速领悟Netty专家花大量时间积累的经验,提高编程水平及分析解决问题的能力,《Netty木又威指南》作者力作,众专家力荐 Netty将Java NIO...
这个"hello netty"的代码练习旨在帮助开发者深入理解 Netty 的工作原理,通过实践来加强理论知识。 在实践中,我们通常会遵循以下步骤来创建一个简单的 Netty 应用: 1. **配置**:首先,我们需要配置服务器和...
《Netty实战》这本书是针对Java网络编程框架Netty的一本深入实践教程,旨在帮助读者掌握Netty的核心特性和实际应用。Netty是一款高性能、异步事件驱动的网络应用程序框架,广泛应用于各种分布式系统、微服务架构以及...
《跟闪电侠学Netty:Netty即时聊天实战与底层原理》是一本深入浅出的Netty技术指南,旨在...通过学习这本书,你不仅可以学会Netty的基本使用,还能深入了解其设计思想和优化手段,为你的Java网络编程之路打下坚实基础。
Netty基础,用于学习Netty,参考黑马程序员的netty教程
Netty是Java领域的一款高性能、异步事件驱动的网络应用框架,主要用于快速开发可维护的高性能协议服务器和客户端。在本精讲中,我们将深入探讨Netty的核心概念、设计模式以及实际应用场景,帮助你全面理解并掌握...
《Netty实战》是针对Java开发者的一本技术指南,它深入介绍了如何利用Netty这个高性能、异步事件驱动的网络应用程序框架来构建高效且可扩展的网络应用。Netty不仅简化了网络编程的复杂性,还提供了丰富的特性和组件...
Netty学习之ServerChannel Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本篇中,我们将深入探讨ServerChannel这一核心概念,它是Netty中用于接收客户端...