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

来源:互联网 发布:网络客服的工作职责 编辑:程序博客网 时间:2024/05/22 00:51

本站采用创作共用版权 CC BY-NC-ND/2.5/CN 许可协议,如非特别注明,本站内容均为OneCoder原创,转载请务必注明作者和出处
本文地址:http://www.coderli.com/netty-course-hello-world
Java程序员-1群 (已满):225893085:Java程序员-1群Java程序员-2群:206787481:Java程序员-2群
Java程序员群论坛,每天分享实用资源

OneCoder的图传已从又拍图片管家迁移到七牛云存储,由于文章过多无法一一修改,如果文中图片无法显示,麻烦留言通知我。我会第一时间修改。邮箱地址:wushikezuo@gmail.com

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

 
Netty的简介和下载可参考:《开源Java高性能NIO框架推荐 – Netty》。注意,此时的最新版已经为3.5.2.Final。
 
如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是"Hello world",不过Netty官网的例子却偏偏抛弃了"Hello world"。那我们就自己写一个最简单的"Hello world"的例子,作为上手。

?
HelloServer.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
 * Netty 服务端代码
 *
 * @author lihzh
 * @alia OneCoder
 * @blog http://www.coderli.com
 */
publicclass HelloServer {
 
    publicstatic void main(String args[]) {
        // Server服务启动器
        ServerBootstrap bootstrap = newServerBootstrap(
                newNioServerSocketChannelFactory(
                        Executors.newCachedThreadPool(),
                        Executors.newCachedThreadPool()));
        // 设置一个处理客户端消息和各种消息事件的类(Handler)
        bootstrap
                .setPipelineFactory(newChannelPipelineFactory() {
                    @Override
                    publicChannelPipeline getPipeline()
                            throwsException {
                        returnChannels
                                .pipeline(newHelloServerHandler());
                    }
                });
        // 开放8000端口供客户端访问。
        bootstrap.bind(newInetSocketAddress(8000));
    }
 
    privatestatic class HelloServerHandler extends
            SimpleChannelHandler {
 
        /**
         * 当有客户端绑定到服务端的时候触发,打印"Hello world, I'm server."
         *
         * @alia OneCoder
         * @author lihzh
         */
        @Override
        publicvoid channelConnected(
                ChannelHandlerContext ctx,
                ChannelStateEvent e) {
            System.out.println("Hello world, I'm server.");
        }
    }
}
?
HelloClient.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
 * Netty 客户端代码
 *
 * @author lihzh
 * @alia OneCoder
 * @blog http://www.coderli.com
 */
publicclass HelloClient {
 
    publicstatic void main(String args[]) {
        // Client服务启动器
        ClientBootstrap bootstrap = newClientBootstrap(
                newNioClientSocketChannelFactory(
                        Executors.newCachedThreadPool(),
                        Executors.newCachedThreadPool()));
        // 设置一个处理服务端消息和各种消息事件的类(Handler)
        bootstrap.setPipelineFactory(newChannelPipelineFactory() {
            @Override
            publicChannelPipeline getPipeline() throwsException {
                returnChannels.pipeline(newHelloClientHandler());
            }
        });
        // 连接到本地的8000端口的服务端
        bootstrap.connect(newInetSocketAddress(
                "127.0.0.1",8000));
    }
 
    privatestatic class HelloClientHandler extendsSimpleChannelHandler {
 
 
        /**
         * 当绑定到服务端的时候触发,打印"Hello world, I'm client."
         *
         * @alia OneCoder
         * @author lihzh
         */
        @Override
        publicvoid 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,抢劫了找110一个道理。所以,这里,我们处理的是当客户端和服务端完成连接以后的这个事件。什么时候完成的连接,Netty知道,他告诉我了,我就负责处理。这就是框架的作用。Netty,提供的事件还有很多,以后会慢慢的接触和介绍。
 
你应该已经可以上手了:)

如非特别注明,本站内容均为OneCoder原创,转载请务必注明作者和原始出处。
本文地址:http://www.coderli.com/netty-course-hello-world

0 0
原创粉丝点击