沐鸣娱乐


        Java网络编程(JAVA网络编程面试题)

        传统的TCP和UDP通讯都是同步阻塞式IO(BIO) ,I指输入流 ,O指输出流 ,阻塞体现在通信的双方接收和发送信息的速率不一样 ,从而导致快的一方一直在等待慢的一方,不能进行下一步动作,同步体现在一直在等待对方响应

        NIO即同步非阻塞式IO ,JDK4提出来的 ,主要有三大组件:Buffer(这个BIO也有 ,做数据缓冲,例如ReaderBuffer),Channel(这个类似BIO的输出输入流 ,不同点在于,channel是全双工的,可以双向通信),Selector(多路选择器  ,实现非阻塞IO的关键) ,服务端建立ServerSocketChannel后,将其绑定在Selector上 ,Selector对ServerSocketChannel管道上接入的客户端连接进行轮询监听,当发生相应的Selectionkey事件后 ,进行相应的读写操作 ,这种情况下 ,是一个服务端管道对应多个客户端管道 ,中间用一个选择器对多个客户端管道的进行处理,当哪个管道有事件发生的时候 ,就拿这个管道与服务端管道进行对接通信,这样就不用一直等着某个客户端了 ,实现了非阻塞

        AIO即异步IO ,JDK7提出来的,采用回调方法进行读写操作,简单讲就是,消息给你发过去就不管了,你啥时候回我 ,调用我给你的方法(回调方法)就行了 ,建立管道连接方式和BIO/NIO差不多 ,核心类是Completionhandler ,用于回调操作

        Netty是一个非阻塞,基于异步事件驱动的网络通信框架,简单讲是NIO和AIO的组合体 ,利用回调函数(主要是各种handler类)实现了异步(这点像AIO),利用事件分类做了业务驱动处理,例如对处理类分成Inbound和OutBound两种类型,通信套路跟上述通信方式大同小异,都是建立管道进行通信

        相关新闻

        联系我们
        联系我们
        分享本页
        返回顶部

          XML地图