netty学习(二)——Hello world!


在认识完基本概念后,我们开始进行我们自己的hello world 简单范例,以此来揭开netty的第一层面纱:

1,maven

        首先我们需要引入netty的jar包,依赖如下:

<dependency>
	<groupId>io.netty</groupId>
	<artifactId>netty</artifactId>
	<version>3.10.5.Final</version>
</dependency>

2,服务端

        服务端的简单逻辑就是监听8000端口,注册消息处理方法,在获取到客户端链接的方法中打印 hello world


package com.xvshu.test.one;

import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.*;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;

import java.net.InetSocketAddress;
import java.util.concurrent.Executors;

/**
 * Netty 服务端
 * Created by xvshu on 2016/7/13.
 */
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.");

        }

    }
}



3,客户端

客户端比较简单,启动一个客户端,在获取到服务端链接的方法中打印 hello world


package com.xvshu.test.one;

import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.*;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;

import java.net.InetSocketAddress;
import java.util.concurrent.Executors;

/**
 * Netty 客户端
 * Created by xvshu on 2016/7/13.
 */
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.");

        }

    }
}

最后我们先运行服务端,然后运行客户端,发现都打印了hello world ,证明他们两个链接建立成功!


总结:

        网络是强大的,这些代码在网上就是最简单的示例,却为我们提供了非常好的学习入口,让人感觉简单,这样的感觉,是学习总比不可少的,起码是在初期比不可少的,信息+信心,我们将学习无所不易!

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告