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