Netty入门环境搭建及使用

Posted 51架构师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty入门环境搭建及使用相关的知识,希望对你有一定的参考价值。

一、项目创建

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

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

Netty入门环境搭建及使用

 点击完成。

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

Netty入门环境搭建及使用

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

  Netty入门环境搭建及使用

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


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

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

Netty入门环境搭建及使用

 1 package com.coder.server; 
2

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

9
/**
10 * 输出接收到的消息
11 * @author Coder
12 *
13 */
14 public class HelloServerHandler extends ChannelInboundHandlerAdapter {
15 /**
16     * 收到数据时调用
17 */
18    @Override
19 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
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    @Override    
36 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
37 // 当出现异常就关闭连接
38        cause.printStackTrace();       
39        ctx.close();        
40    }    
41 }

Netty入门环境搭建及使用

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

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

Netty 服务器的通信步骤为:

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

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

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

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

Netty入门环境搭建及使用

 1 package com.coder.server; 
2

3
import io.netty.bootstrap.ServerBootstrap;
4
import io.netty.channel.ChannelFuture;
5
import io.netty.channel.ChannelInitializer;
6
import io.netty.channel.ChannelOption;
7
import io.netty.channel.EventLoopGroup;
8
import io.netty.channel.nio.NioEventLoopGroup;
9
import io.netty.channel.socket.SocketChannel;

10 import io.netty.channel.socket.nio.NioserverSocketChannel;

11
12 public class HelloServer {
13 private int port;
14
15 public HelloServer(int port) {

16 this.port = port;

17    }
   
18
19 public void run() throws Exception {

20 EventLoopGroup bossGroup = new NioEventLoopGroup(); // 用来接收进来的连接
21 EventLoopGroup workerGroup = new NioEventLoopGroup(); // 用来处理已经被接收的连接
22 System.out.println("准备运行端口:" + port);
23
24 try {
25 ServerBootstrap b = new ServerBootstrap();
26            b.group(bossGroup, workerGroup)
27 .channel(NioServerSocketChannel.class) // 这里告诉Channel如何接收新的连接
28 .childHandler( new ChannelInitializer<SocketChannel>() {
29                @Override
               
30 protected void initChannel(SocketChannel ch) throws Exception {

31 // 自定义处理类

32 ch.pipeline().addLast(new HelloServerHandler());

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) throws Exception {

50 int port = 10110;

51 new HelloServer(port).run();

52    }
   
53
54 }

Netty入门环境搭建及使用

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

三、测试 

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

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

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

  Netty入门环境搭建及使用

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

  在 cmd 窗口输入命令如下:

  Netty入门环境搭建及使用

打开窗口如下:

  

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

  

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



以上是关于Netty入门环境搭建及使用的主要内容,如果未能解决你的问题,请参考以下文章

1.2 lucene入门程序环境搭建及入门代码

Netty 简单入门

Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例附详细代码

建议收藏带你入门数据分析及环境搭建

ROS开发环境搭建及入门

Spark入门实战系列--3.Spark编程模型(下)--IDEA搭建及实战