java netty 搭建_Netty入门(一)环境搭建及使用

本文介绍了如何使用Eclipse创建Maven项目并配置Netty依赖,然后逐步讲解如何编写一个简单的服务端Demo,包括自定义消息处理器和启动Netty服务器。最后,通过telnet客户端测试了服务端的运行效果。
摘要由CSDN通过智能技术生成

一、项目创建

在 Eclipse 中右键,新建->项目->Maven->Maven Project->下一步->选择 quickstart

d8f51d4f5673185a8f5391f32c7d471d.png

下一步->设置如图(参数自取)

c9b963255a605f01127dbd3b4cbef5a9.png

点击完成。

项目会自动创建 pom.xml 文件,打开该文件,点击 Dependencies标签->Add..,设置如图(参数由 Netty 版本决定):

b72a01741378d4af6f1aafedd85ab010.png

点击 OK,保存文件,观察 Maven Dependencies 下,

a4752c979c5ab9a618da1a04df84e3cf.png

netty 的 jar 包已经添加完毕。到此为止,项目配置完毕了,下面就来添加代码吧。

二、实现一个简单的服务端 demo

1. 首选我们需要自定义一个类处理服务器接收到的消息

1 packagecom.coder.server;2

3 importio.netty.buffer.ByteBuf;4 importio.netty.channel.ChannelHandlerContext;5 importio.netty.channel.ChannelInboundHandlerAdapter;6 importio.netty.util.CharsetUtil;7 importio.netty.util.ReferenceCountUtil;8

9 /**

10 * 输出接收到的消息11 *@authorCoder12 *13 */

14 public class HelloServerHandler extendsChannelInboundHandlerAdapter {15 /**

16 * 收到数据时调用17 */

18 @Override19 public void channelRead(ChannelHandlerContext ctx, Object msg) throwsException {20 try{21 ByteBuf in =(ByteBuf)msg;22 System.out.print(in.toString(CharsetUtil.UTF_8));23 } finally{24 //抛弃收到的数据

25 ReferenceCountUtil.release(msg);26 }27

28 //ctx.write(msg);29 //ctx.flush();

30 }31

32 /**

33 * 当Netty由于IO错误或者处理器在处理事件时抛出异常时调用34 */

35 @Override36 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throwsException {37 //当出现异常就关闭连接

38 cause.printStackTrace();39 ctx.close();40 }41 }

该类主要是实现了接收客户端发来的消息,并输出到控制台。

2. 然后我们就能实现一个简单的服务端程序了

Netty 服务器的通信步骤为:

创建两个NIO线程组,一个专门用于接收来自客户端的连接,另一个则用于处理已经被接收的连接。

创建一个ServerBootstrap对象,配置Netty的一系列参数,例如接受传出数据的缓存大小等。

创建一个用于实际处理数据的类ChannelInitializer,进行初始化的准备工作,比如设置接受传出数据的字符集、格式以及实际处理数据的接口。

绑定端口,执行同步阻塞方法等待服务器端启动即可。

1 packagecom.coder.server;2

3 importio.netty.bootstrap.ServerBootstrap;4 importio.netty.channel.ChannelFuture;5 importio.netty.channel.ChannelInitializer;6 importio.netty.channel.ChannelOption;7 importio.netty.channel.EventLoopGroup;8 importio.netty.channel.nio.NioEventLoopGroup;9 importio.netty.channel.socket.SocketChannel;10 importio.netty.channel.socket.nio.NioServerSocketChannel;11

12 public classHelloServer {13 private intport;14

15 public HelloServer(intport) {16 this.port =port;17 }18

19 public void run() throwsException {20 EventLoopGroup bossGroup = new NioEventLoopGroup(); //用来接收进来的连接

21 EventLoopGroup workerGroup = new NioEventLoopGroup(); //用来处理已经被接收的连接

22 System.out.println("准备运行端口:" +port);23

24 try{25 ServerBootstrap b = newServerBootstrap();26 b.group(bossGroup, workerGroup)27 .channel(NioServerSocketChannel.class) //这里告诉Channel如何接收新的连接

28 .childHandler( new ChannelInitializer() {29 @Override30 protected void initChannel(SocketChannel ch) throwsException {31 //自定义处理类

32 ch.pipeline().addLast(newHelloServerHandler());33 }34 })35 .option(ChannelOption.SO_BACKLOG, 128)36 .childOption(ChannelOption.SO_KEEPALIVE, true);37

38 //绑定端口,开始接收进来的连接

39 ChannelFuture f =b.bind(port).sync();40

41 //等待服务器socket关闭

42 f.channel().closeFuture().sync();43 } catch(Exception e) {44 workerGroup.shutdownGracefully();45 bossGroup.shutdownGracefully();46 }47 }48

49 public static void main(String[] args) throwsException {50 int port = 10110;51 newHelloServer(port).run();52 }53

54 }

那么,这便是一个可执行的服务端程序了。运行后控制台输出如下:

fadfd190f482a77644d65aa2412b1081.png

三、测试

我们可以去自定义客户端程序,这里为了方便使用 telnet 充当客户端。

需要注意的是,Windows 默认是没有开启 telnet 客户端的,需要我们手动开启。

菜单->控制面板->程序->打开或关闭Windows功能,设置如图:

7e823e739ced532549c02265d4507b41.png

这样我们就能用 telnet 客户端了。

在 cmd 窗口输入命令如下:

0c62ab17d8ee151ae4c7792c6f0535bb.png

打开窗口如下:

bfd1b03af20f142a5be51cb63c032403.png

这时候我们在该窗口输入什么,eclipse 控制台也会对应输出相应内容。如下:

6c0bfcc1b8831a67351a0167eacf6097.png

注意:telnet 窗口会看不到输入的字符,只要输入 ctrl+L 就可以看到输入的字符了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值