netty深入学习之中的一个: 入门篇
本文代码下载:
1)Netty是什么
Netty是Java NIO之上的网络库(API)。Netty 提供异步的、事件驱动的网络应用程序框架和工具,用以高速开发高性能、高可靠性的网络服务器和客户端程序。
2)Netty的特性
统一的API。适用于不同的协议(堵塞和非堵塞)。基于灵活、可扩展的事件驱动模型。高度可定制的线程模型。可靠的无连接数据Socket支持(UDP)性能。更好的吞吐量,低延迟。更省资源,尽量降低不必要的内存拷贝。完整的SSL/ TLS和STARTTLS的支持。能在Applet和Android的限制环境运行良好。健壮性:不再因过快、过慢或超负载连接导致OutOfMemoryError。不再有在高速网络环境下NIO读写频率丌一致的问题。易用:完好的Java doc,用户指南和样例,简洁简单。仅依赖于JDK1.5。3)Netty高速上手
俗话说。万事开头难,因此我构建了一个Netty项目模板:avro-channel。目的是结合Netty和Avro实现异步传输数据和RPC(远程过程调用)。avro-channel最初的目的是为了实现一套RPC服务。发现了Netty功能如此强大之后,就想使用Netty构建整个后端体系。因此,本文的样例代码提供了一个简单的Netty入门:HelloWorldServer和HelloWorldClient。
构建项目非常easy。第一步。手工安装依赖jar到你的机器上,进入项目pom.xml所在文件夹:
$ python ./mvn-install-lib.py
上面这个命令把lib/下的jar包安装到你的机器上。然后运行以下的命令构建:
$ mvn clean compile package assembly:assembly
最后打开2个终端a,b。分别运行以下的服务器和客户端:
a 启动服务器:
$ java -jar ./target/avro-channel-1.0-PRE.jar或 $ java -cp ./target/avro-channel-1.0-PRE.jar avro.channel.server.netty.HelloWorldServerb 启动客户端: $ java -cp ./target/avro-channel-1.0-PRE.jar avro.channel.client.netty.HelloWorldClient4)样例工程结构
avro-channel是标准的maven(3.05)工程,文件夹结构例如以下:
lib/netty包括jboss.netty和io.netty二个版本号系列。最后让我们看看完整的pom.xml:
4.0.0 avro-channel is a java framework for data transport and rpc. created by zhangliang avro.channel avro-channel jar 1.0-PRE avro-channel http://maven.apache.org UTF-8 2.3.2 1.7.7 1.7.10 1.9.13 3.2.10.Final 5.0.0.Alpha2 avro.channel.server.netty.HelloWorldServer junit junit 3.8.1 test org.slf4j slf4j-api ${slf4j.version} org.slf4j slf4j-simple ${slf4j.version} org.jboss.netty netty ${jboss.netty.version} io.netty netty-all ${io.netty.version} org.apache.avro avro ${avro.version} org.apache.avro avro-ipc ${avro.version} org.codehaus.jackson jackson-core-asl ${jackson.version} org.codehaus.jackson jackson-mapper-asl ${jackson.version} org.apache.maven.plugins maven-compiler-plugin ${compiler-plugin.version} org.apache.avro avro-maven-plugin ${avro.version} schemas generate-sources schema protocol idl-protocol ${project.basedir}/src/main/avro/ ${project.basedir}/src/main/java/ org.apache.maven.plugins maven-jar-plugin true lib/ ${main.class} org.apache.maven.plugins maven-dependency-plugin copy package copy-dependencies ${project.build.directory}/lib maven-assembly-plugin 2.2 ${main.class} jar-with-dependencies