`

Java NIO框架Netty教程(六)-Java NIO Selector模式

    博客分类:
  • java
 
阅读更多

来自Netty系列教程:http://www.coderli.com/netty-nio-selector

 

NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有事件发生时,他会通知我们,传回一组SelectionKey,我们读取这些Key,就会获得我们刚刚注册过的socketchannel,然后,我们从这个Channel中读取数据,放心,包准能够读到,接着我们可以处理这些数据。

 

这是笔者摘录的一小段总结,就这一小段基本已经可以说明问题了。接下来,我们要考虑的就是,要实现这个过程,我们需要做什么?顺着描述,我们可以想象,需要选择器,需要消息传送的通道,需要注册一个事件,用于识别。通道自然需要绑定到一个地址。有了这样大概的想法,我们就可以去API里找相关的接口。

 

 
Selector服务端样例代码:
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
/**
 * Java NIO Select模式服务端样例代码
 *
 * @author lihzh
 * @alia OneCoder
 * @date 2012-7-16 下午9:22:53
 */
public class NioSelectorServer {
 
    /**
     * @author lihzh
     * @throws IOException
     * @alia OneCoder
     * @date 2012-7-16 下午9:22:53
     */
    public static void main(String[] args) throws IOException {
        // 创建一个selector选择器
        Selector selector = Selector.open();
        // 打开一个通道
        ServerSocketChannel socketChannel = ServerSocketChannel.open();
        // 绑定到9000端口
        socketChannel.socket().bind(new InetSocketAddress(8000));
        // 使设定non-blocking的方式。
        socketChannel.configureBlocking(false);
        // 向Selector注册Channel及我们有兴趣的事件
        socketChannel.register(selector, SelectionKey.OP_ACCEPT);
        for (;;) {
            // 选择事件
            selector.select();
            // 当有客户端准备连接到服务端时,便会出发请求
            for (Iterator<SelectionKey> keyIter = selector.selectedKeys()
                    .iterator(); keyIter.hasNext();) {
                SelectionKey key = keyIter.next();
                keyIter.remove();
                System.out.println(key.readyOps());
                if (key.isAcceptable()) {
                    System.out.println("Accept");
                    // 接受连接到此Channel的连接
                    socketChannel.accept();
                }
            }
        }
    }
}

 

Selector客户端样例代码:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
/**
 * Java NIO Selector模式,客户端代码
 *
 * @author lihzh
 * @alia OneCoder
 */
public class NioSelectorClient {
 
    /**
     * @author lihzh
     * @throws IOException
     * @alia OneCoder
     */
    public static void main(String[] args) throws IOException {
        SocketChannel channel = SocketChannel.open();
        channel.configureBlocking(false);
        channel.connect(new InetSocketAddress("127.0.0.1", 8000));
    }
}

 

代码很简单,服务端接受到客户端的连接请求后,会打印出"Accept"信息。
 
简单概括就是,整一个通道,通道加个选择过滤器,看来的事件是不是我想要的,不想要的干脆不管,想要的,我就存起来,留着慢慢处理。
分享到:
评论

相关推荐

    Java_NIO框架Netty教程.pdf

    学习Netty,需要掌握Java NIO的基本概念,如选择器(Selector)、通道(Channel)、缓冲区(Buffer)等,以及Netty框架的使用和设计模式。通过阅读"Java NIO框架Netty教程.pdf",你可以深入理解Netty的工作原理,并...

    详细介绍 NIO与Netty编程-实战讲义详细pdf.7z

    **NIO(非阻塞I/O)与Netty编程**是现代Java网络应用开发中的重要技术,它们在处理高并发、低延迟的网络通信场景中起着关键作用。本讲义详细介绍了这两种技术,旨在帮助开发者更好地理解和运用它们。 ### 一、BIO...

    Netty实战-netty-in-action.zip

    Netty采用非阻塞I/O(NIO)模型,基于Java的Selector机制,实现了高效的异步事件驱动。这种模型允许在处理大量并发连接时保持低资源消耗,提高了系统性能。 3. **Channel与Handler**: - **Channel**:在Netty中...

    Java NIO英文高清原版

    Netty是一个基于NIO的高性能、异步事件驱动的网络应用框架,它简化了网络编程,广泛应用于服务器端应用开发。 NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。以下是对这些核心概念的...

    【项目实战】Netty源码剖析&NIO;+Netty5各种RPC架构实战演练三部曲视频教程(未加密)

    Netty是一款基于Java NIO的高性能服务器端编程框架,用于快速开发可维护的网络应用程序。它简化了网络编程的复杂性,使开发者能够更加专注于业务逻辑的实现。Netty提供了事件驱动模型、异步处理能力以及丰富的API...

    netty-api-4.1 中文版

    Netty 的核心是基于非阻塞 I/O(NIO)模型,Java NIO(New IO)库提供了一种不同于传统阻塞 I/O 的方式来处理 I/O 操作。在传统的阻塞 I/O 中,一个线程对应一个连接,当进行读写操作时,如果数据未准备好,线程会被...

    netty-in-action.pdf

    - **Java NIO的问题及Netty的解决方案**: - **Epoll错误**:Java NIO早期版本中存在的一些问题,如Epoll误报等问题,在Netty中得到了有效解决。 - **内存泄漏**:Netty提供了Buffer池管理机制,避免了内存泄漏...

    Netty--Java IO/NIO 框架 简单学习例子

    通过阅读博客《Netty--Java IO/NIO 框架 简单学习例子》,你可以了解如何使用 Netty 创建简单的服务器和客户端,以及如何处理网络通信的基本流程。在实际项目中,Netty 的强大功能和易用性使其成为Java网络编程的...

    Java-NIO2教程

    ### Java-NIO2教程知识点详解 #### I/O发展简史 - **JDK1.0-1.3**: 在此期间,Java的I/O模型主要依赖于传统的阻塞I/O方式,这种模式下,应用程序在等待I/O操作完成时无法执行其他任务,导致效率低下。此外,当时的...

    Netty-API-文档中文版

    1. **异步模型**:Netty 采用非阻塞I/O(NIO)模型,基于Java的Selector和Channel实现。这种模式允许在单个线程中处理多个连接,提高了系统的并发能力。 2. **零拷贝**:Netty 实现了零拷贝机制,减少了数据在内存...

    基于JAVA IO, NIO, Netty, 多线程并发实战源码.zip

    Java IO、NIO和Netty是Java平台中用于处理输入/输出操作的重要组件,而多线程并发则是提升程序性能和响应能力的关键技术。在这个压缩包"基于JAVA IO, NIO, Netty, 多线程并发实战源码.zip"中,我们可以期待找到一些...

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...

    java_Netty权威指南,详解nio,tcp,http,netty

    Java Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的协议服务器和客户端。这个权威指南深入探讨了Netty的核心概念和技术,同时也涵盖了与网络编程相关的基础,如非阻塞I/O(NIO)、传输...

    java NIO技巧及原理

    Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(IO)相比,提供了更加高效的数据传输方式。在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于...

    netty-in-action(精髓)

    Netty是由Java编写的一个开源框架,其核心设计目标是提供一个灵活、易用且高性能的网络应用编程接口(API),尤其适合处理高并发、低延迟的网络应用。 Netty的基础是Java的NIO(Non-blocking I/O,非阻塞IO)。在...

    netty面试专题-答案-一起学习

    Netty 是一个高度优化、广泛使用的 Java NIO 框架,它简化了网络应用程序的开发,特别是对于高性能、高并发的服务器应用。Netty 的核心特性包括: 1. **异步事件驱动**:Netty 使用了 NIO 的事件驱动模型,通过事件...

    Socket 之 BIO、NIO、Netty 简单实现

    在Java中,Socket通信涉及三种不同的模型:BIO(Blocking I/O)、NIO(Non-blocking I/O)和Netty,这些都是实现高并发、高性能网络服务的重要手段。 **1. Socket基础** Socket,通常被称为套接字,是网络通信的...

    基于Java NIO反应器模式设计与实现

    Mina是一个完全由Java编写的NIO框架,而Netty则是由JBOSS提供的一个高性能的异步事件驱动的网络应用框架,它们都是基于Java反应器模式设计的,用于处理大量并发连接的场景。 综上所述,基于Java NIO的反应器模式...

    Netty权威指南源码-含jar包,导入eclipse直接使用

    Netty是Java领域的一款高性能、异步事件驱动的网络应用框架,主要用于快速开发可维护的高性能协议服务器和客户端。这个“Netty权威指南源码-含jar包,导入eclipse直接使用”的压缩包包含了Netty的源代码以及相关jar包...

Global site tag (gtag.js) - Google Analytics