netty深入学习之一: 入门篇

netty深入学习之一: 入门篇

本文代码下载:

http://download.csdn.net/detail/cheungmine/8497549


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。

构建项目很简单,第一步,手工安装依赖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.HelloWorldServer
b 启动客户端
        $ java -cp ./target/avro-channel-1.0-PRE.jar avro.channel.client.netty.HelloWorldClient

4)例子工程结构

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}
                
                    1.6
                    1.6
                    UTF-8
                
            

            
                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
                    
                
            

        
    




你可能感兴趣的:(network,netty,avro,java)