Netty5入门(1)

一、     搭建开发环境

 

本教程使用的开发环境为MacOSX 10.10+JDK1.8+Eclipse Java EE IDE4.4.1+Maven3.2.5。以下是开发环境的搭建过程。

1. 安装JDK 1.8

本教程使用的JDK版本为JDK1.8。你可以在http://java.com下载到这个最新的JDK。

JDK的安装配置就不用多说了,你明白的。

2. 安装Eclipse Java EE

本教程使用Eclipse为Eclipse Java EE 4.4.1,你可以在http://www.eclipse.org下载这个最新的IDE。

下载后解压缩到一定的目录即可。在此我们推荐这个Eclipse版本,是因为它自带了m2e插件,支持Maven项目的创建、打包,不需要你去记忆复杂的mvn命令,毕竟要一下子记住那么多命令也是需要时间的。

3. 下载安装Apache Maven.

本教程使用的Maven3.2.5,你可以在http://maven.apache.org下载到这个最新的Maven版本。

Maven的安装也很简单,解压缩到指定目录即可。

然后配置MAVEN_HOME。编辑~/.bash_profile文件,增加如下内容:

MAVEN_HOME=/Users/kmyhy/Library/apache-maven-3.2.5

PATH=$MAVEN_HOME/bin:$PATH

export MAVEN_HOME

export PATH

然后当前配置立即生效:
source .bash_profile

在Maven安装路径下,找到conf/settings.xml文件,在其中增加一个localRepository元素:

<localRepository>/Users/kmyhy/.m2/repository</localRepository>

这个是你本地Maven库的路径,注意kmyhy请替换成你自己的用户名。

4. 配置 Eclipse

打开Eclipse,偏好设置 >> Maven >> Installation >> Add,添加Maven的安装路径:

技术分享

在Maven>> User Settings下,设置settings.xml路径:

技术分享

注意,如果你的Maven安装路径不同,请根据实际情况进行修改,比如kmyhy请替换成你自己的用户名。

 

二、测试Maven

新建一个Maven Project,选择archType时,请选择quickstart:

技术分享

然后是Group ID和artifact ID:

技术分享

在App.java上右键,Run as >> Java Application,控制台中将输出“Hello Word!”。

三、测试netty

我们用《netty5用户指南》中的“echo服务”来测试。

首先需要在pom.xml中增加一个netty5的依赖:

<dependency>

              <groupId>io.netty</groupId>

              <artifactId>netty-all</artifactId>

              <version>5.0.0.Alpha1</version>

</dependency>

然后实现服务端代码。这将用到两个类。首先是DiscardServerHandler:

package com.ydtf;

import io.netty.channel.ChannelHandlerContext;

import io.netty.channel.ChannelHandlerAdapter;

 

public class EchoServerHandlerextends ChannelHandlerAdapter { // (1)

 

    public voidchannelRead(ChannelHandlerContext ctx, Object msg) { // (2)

       ctx.write(msg); // (1)

       ctx.flush(); // (2)

    }

 

    @Override

    public voidexceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // (4)

       // Close theconnection when an exception is raised.

       cause.printStackTrace();

       ctx.close();

    }

}

然后是EchoServer类:

package com.ydtf;

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;

importio.netty.channel.socket.nio.NioServerSocketChannel;

 

public class EchoServer {

   private int port;

 

    public EchoServer(int port) {

       this.port = port;

    }

 

    public void run() throws Exception {

       EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)

       EventLoopGroup workerGroup = new NioEventLoopGroup();

       try {

           ServerBootstrap b = new ServerBootstrap(); // (2)

           b.group(bossGroup, workerGroup)

            .channel(NioServerSocketChannel.class) // (3)

            .childHandler(newChannelInitializer<SocketChannel>() { // (4)

                 @Override

                 public voidinitChannel(SocketChannel ch) throws Exception {

                     ch.pipeline().addLast(new EchoServerHandler());

                 }

            })

            .option(ChannelOption.SO_BACKLOG, 128)          // (5)

            .childOption(ChannelOption.SO_KEEPALIVE, true); // (6)

 

           // Bind andstart to accept incoming connections.

           ChannelFuture f = b.bind(port).sync(); // (7)

 

           // Wait untilthe server socket is closed.

           // In this example,this does not happen, but you can do that to gracefully

           // shut downyour server.

           f.channel().closeFuture().sync();

       } finally {

           workerGroup.shutdownGracefully();

           bossGroup.shutdownGracefully();

       }

    }

 

    public static void main(String[] args) throws Exception {

       int port;

       if (args.length > 0) {

           port = Integer.parseInt(args[0]);

       } else {

           port = 8080;

       }

       new EchoServer(port).run();

    }

}

在Project Explorer窗口,在src/main/java下找到DiscardServer.java,右键,选择Run as >> Java Applicatoin,运行服务端。

打开终端程序,输入telnet localhost 8080,连上服务端。然后输入 hello netty,回车,服务端将立即回显一个hello netty到终端窗口。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。