美文网首页
netty介绍:一个饭店的故事

netty介绍:一个饭店的故事

作者: benbendy1984 | 来源:发表于2017-08-25 00:06 被阅读0次

    开个饭店

    假如我们开了一个饭店,饭店里面有接待、点菜、厨师、上菜、收银等角色。 这里的接待比较特殊,她是负责在门外招揽顾客,有点销售的性质,所以饭店生意的好坏和他有非常紧密的关系(不考虑回头客)。
    如何让更多的客户来饭店消费,就成了店长的最主要的问题,如果你是店长,如何去安排这些人呢?

    netty模式饭店

    我们使用netty来开发一个服务端的系统,就类似开发饭店,前者来处理用户在网络上访问,后者来招待吃饭的客户。所以应该有下面这个图。


    一个饭店故事

    netty服务端程序

    我们来看一个典型的netty服务端程序

    public class NettyEchoServer {
        private static final Logger logger = LoggerFactory.getLogger(NettyEchoServer.class);
        public final int port;
    
        public NettyEchoServer(int port) {
            this.port = port;
        }
    
        public static void main(String[] args) throws Exception {
            int port = 9999;
            new NettyEchoServer(port).start();
        }
    
        public void start() throws Exception {
            final EchoServerHandler serverHandler = new EchoServerHandler();
            //1. 创建事件循环组
            EventLoopGroup group = new NioEventLoopGroup();
            EventLoopGroup child = new NioEventLoopGroup();
            try {
                //2. 创建ServerBootstrap
                ServerBootstrap b = new ServerBootstrap();
                b.group(group, child)
                    //3. 指定使用NIO传输Channel
                    .channel(NioServerSocketChannel.class)
                    //4.指定socket端口
                    .localAddress(new InetSocketAddress(port))
                    //5. 添加EchoServerHandler到ChannelPipeline
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel socketChannel) throws Exception {
                            //因为EchoServerHandler是@Sharable的,所以我们一直可以使用同一个
                            socketChannel.pipeline().addLast(serverHandler);
                        }
                    });
                //6. 异步绑定,使用sync()等待绑定完成
                ChannelFuture f = b.bind().sync();
                //7. 获取Chaneel的CloseFuture,阻塞当前线程,知道其完成
                f.channel().closeFuture().sync();
            } finally {
                //8. 关闭EventLoopGroup,释放所有资源
                group.shutdownGracefully().sync();
            }
        }
    }
    

    这个程序就不详细介绍了,网上很多的,下面和开饭店对比下,理解会更加的深刻。

    对比

    这里从各个模块对饭店和服务端程序进行对比

    ServerBootstrap

    这个就是整个饭店,里面包含了很多的成员,还包括很多的操作:开业,关门等等。

    EventLoopGroup

    我们看到代码中有两个事件循环组,这里从几个关键词来讲解:
    两个:饭店的人员分成两类,一类是负责接待的,从客户从店外引入店内的,另外一类是具体服务的(包括点菜、厨师、端菜和买单等)
    组:接待的人是一个组(当然我上面的图中只有一个,因为接待非常快,一个人和多个差异不大),同时可以接待多个客户;具体服务也一样,可以同时服务很多桌子的客户。
    循环:就是所有饭店员工在不停的工作,除非下班了(服务停了)

    NioServerSocketChannel

    这个是对招待的员工的要求:升高160+、五官端正、普通话标准;以及具体的操作:客户同意后需要带到我们的饭店

    InetSocketAddress(port)

    这个是招待的员工站在哪里比较合适

    pipeline

    具体的流水:对饭店而言,就是如何服务客户的流程:点菜、烧菜、上菜、买单...

    总结

    现在研究netty不久,中间有些理解或者对比可能不是很合适,希望大家指正,谢谢

    相关文章

      网友评论

          本文标题:netty介绍:一个饭店的故事

          本文链接:https://www.haomeiwen.com/subject/mbeydxtx.html