`
jguangyou
  • 浏览: 368988 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java NIO框架Netty教程(一) Hello Netty(转)

 
阅读更多

先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。


如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是"Hello world",不过Netty官网的例子却偏偏抛弃了"Hello world"。那我们就自己写一个最简单的"Hello world"的例子,作为上手

/**

 * Netty 服务端代码

 *

 * @author lihzh

 * @alia OneCoder

 * @blog http://www.coderli.com

 */

public class HelloServer {

 

    public static void main(String args[]) {

        // Server服务启动器

        ServerBootstrap bootstrap = new ServerBootstrap(

                new NioServerSocketChannelFactory(

                        Executors.newCachedThreadPool(),

                        Executors.newCachedThreadPool()));

        // 设置一个处理客户端消息和各种消息事件的类(Handler)

        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {

            @Override

            public ChannelPipeline getPipeline() throws Exception {

                return Channels.pipeline(new HelloServerHandler());

            }

        });

        // 开放8000端口供客户端访问。

        bootstrap.bind(new InetSocketAddress(8000));

    }

 

    private static class HelloServerHandler extends SimpleChannelHandler {

 

        /**

         * 当有客户端绑定到服务端的时候触发,打印"Hello world, I'm server."

         *

         * @alia OneCoder

         * @author lihzh

         */

        @Override

        public void channelConnected(ChannelHandlerContext ctx,

                ChannelStateEvent e) {

            System.out.println("Hello world, I'm server.");

        }

    }

}

/**

 * Netty 客户端代码

 *

 * @author lihzh

 * @alia OneCoder

 * @blog http://www.coderli.com

 */

public class HelloClient {

 

    public static void main(String args[]) {

        // Client服务启动器

        ClientBootstrap bootstrap = new ClientBootstrap(

                new NioClientSocketChannelFactory(

                        Executors.newCachedThreadPool(),

                        Executors.newCachedThreadPool()));

        // 设置一个处理服务端消息和各种消息事件的类(Handler)

        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {

            @Override

            public ChannelPipeline getPipeline() throws Exception {

                return Channels.pipeline(new HelloClientHandler());

            }

        });

        // 连接到本地的8000端口的服务端

        bootstrap.connect(new InetSocketAddress(

                "127.0.0.1", 8000));

    }

 

    private static class HelloClientHandler extends SimpleChannelHandler {

 

        /**

         * 当绑定到服务端的时候触发,打印"Hello world, I'm client."

         *

         * @alia OneCoder

         * @author lihzh

         */

        @Override

        public void channelConnected(ChannelHandlerContext ctx,

                ChannelStateEvent e) {

            System.out.println("Hello world, I'm client.");

        }

    }

}

 

 

 

 

既然是分布式的,自然要分多个服务。Netty中,需要区分Server和Client服务。所有的Client都是绑定在Server上的,他们之间是不能通过Netty直接通信的。(自己采用的其他手段,不包括在内。)。白话一下这个通信过程,Server端开放端口,供Client连接,Client发起请求,连接到Server指定的端口,完成绑定。随后便可自由通信。其实就是普通Socket连接通信的过程。

Netty框架是基于事件机制的,简单说,就是发生什么事,就找相关处理方法。就跟着火了找119,cj了找110一个道理。所以,这里,我们处理的是当客户端和服务端完成连接以后的这个事件。什么时候完成的连接,Netty知道,他告诉我了,我就负责处理。这就是框架的作用。Netty,提供的事件还有很多,以后会慢慢的接触和介绍。

你应该已经可以上手了:)

分享到:
评论
3 楼 darren_nizna 2016-09-07  
Netty 实战(精髓)    http://gitlore.com/darren/netty_in_action/index.html
2 楼 大家来学习 2015-11-24  
国内首部NIO+Netty5各种RPC架构实战演练
课程观看地址:http://www.xuetuwuyou.com/course/52


[b]一、课程使用到的软件及版本:
    jdk1.7+netty5+spring4+maven3+protobuf+thrift-0.9.3

二、课程设计到的技术点:
    nio,netty,protobuf,thrift,maven

[/b]
三、学完课程之后,您可以:
①熟练掌握netty基础技术知识
②让您从一个优秀的程序员,走上架构师道路
③快速构建互联网的netty高并发rpc架构
④走上程序员高薪之路

四、课程目录:
第1课、nio简单介绍
第2课、Nio基本组件ByteBuffer
第3课、ServerSocket
第4课、selector与serversocketchannel的使用
第5课、SocketChannelSelector
第6课、aio编程
第7课、netty服务器的快速实现
第8课、netty客户端架构实现
第9课、netty客户端模拟高并发以及netty5线程模型
第10课、netty的编码解码
第11课、protobuf简单讲解
第12课、protobuf与netty整合
第13课、netty与protobuf架构1
第14课、netty与protobuf架构2
第15课、netty http通信与spring整合架构1
第16课、netty http通信与spring整合架构2
第17课、netty websocket聊天室1
第18课、netty websocket聊天室2
第19课、Thrift讲解
第20课、thrift与netty整合
第21课、thrift与netty整合2
第22课、thrift rpc架构1
第23课、thrift rpc架构2
第24课、netty的http与socket
第25课、各种架构整合2以及nety源码分析
第26课、课程总结
1 楼 ramon1989 2015-03-31  
问一下,你的SimpleChannelHandler是哪个包下边的?

相关推荐

Global site tag (gtag.js) - Google Analytics