来自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
* @Blog http://www.coderli.com
* @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
* @blog http://www.coderli.com
*/
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"信息。
简单概括就是,整一个通道,通道加个选择过滤器,看来的事件是不是我想要的,不想要的干脆不管,想要的,我就存起来,留着慢慢处理。
相关推荐
学习Netty,需要掌握Java NIO的基本概念,如选择器(Selector)、通道(Channel)、缓冲区(Buffer)等,以及Netty框架的使用和设计模式。通过阅读"Java NIO框架Netty教程.pdf",你可以深入理解Netty的工作原理,并...
**NIO(非阻塞I/O)与Netty编程**是现代Java网络应用开发中的重要技术,它们在处理高并发、低延迟的网络通信场景中起着关键作用。本讲义详细介绍了这两种技术,旨在帮助开发者更好地理解和运用它们。 ### 一、BIO...
Netty采用非阻塞I/O(NIO)模型,基于Java的Selector机制,实现了高效的异步事件驱动。这种模型允许在处理大量并发连接时保持低资源消耗,提高了系统性能。 3. **Channel与Handler**: - **Channel**:在Netty中...
Netty是一个基于NIO的高性能、异步事件驱动的网络应用框架,它简化了网络编程,广泛应用于服务器端应用开发。 NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。以下是对这些核心概念的...
Netty是一款基于Java NIO的高性能服务器端编程框架,用于快速开发可维护的网络应用程序。它简化了网络编程的复杂性,使开发者能够更加专注于业务逻辑的实现。Netty提供了事件驱动模型、异步处理能力以及丰富的API...
Netty 的核心是基于非阻塞 I/O(NIO)模型,Java NIO(New IO)库提供了一种不同于传统阻塞 I/O 的方式来处理 I/O 操作。在传统的阻塞 I/O 中,一个线程对应一个连接,当进行读写操作时,如果数据未准备好,线程会被...
- **Java NIO的问题及Netty的解决方案**: - **Epoll错误**:Java NIO早期版本中存在的一些问题,如Epoll误报等问题,在Netty中得到了有效解决。 - **内存泄漏**:Netty提供了Buffer池管理机制,避免了内存泄漏...
通过阅读博客《Netty--Java IO/NIO 框架 简单学习例子》,你可以了解如何使用 Netty 创建简单的服务器和客户端,以及如何处理网络通信的基本流程。在实际项目中,Netty 的强大功能和易用性使其成为Java网络编程的...
### Java-NIO2教程知识点详解 #### I/O发展简史 - **JDK1.0-1.3**: 在此期间,Java的I/O模型主要依赖于传统的阻塞I/O方式,这种模式下,应用程序在等待I/O操作完成时无法执行其他任务,导致效率低下。此外,当时的...
1. **异步模型**:Netty 采用非阻塞I/O(NIO)模型,基于Java的Selector和Channel实现。这种模式允许在单个线程中处理多个连接,提高了系统的并发能力。 2. **零拷贝**:Netty 实现了零拷贝机制,减少了数据在内存...
Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...
Java IO、NIO和Netty是Java平台中用于处理输入/输出操作的重要组件,而多线程并发则是提升程序性能和响应能力的关键技术。在这个压缩包"基于JAVA IO, NIO, Netty, 多线程并发实战源码.zip"中,我们可以期待找到一些...
Java Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的协议服务器和客户端。这个权威指南深入探讨了Netty的核心概念和技术,同时也涵盖了与网络编程相关的基础,如非阻塞I/O(NIO)、传输...
Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(IO)相比,提供了更加高效的数据传输方式。在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于...
Netty是由Java编写的一个开源框架,其核心设计目标是提供一个灵活、易用且高性能的网络应用编程接口(API),尤其适合处理高并发、低延迟的网络应用。 Netty的基础是Java的NIO(Non-blocking I/O,非阻塞IO)。在...
Netty 是一个高度优化、广泛使用的 Java NIO 框架,它简化了网络应用程序的开发,特别是对于高性能、高并发的服务器应用。Netty 的核心特性包括: 1. **异步事件驱动**:Netty 使用了 NIO 的事件驱动模型,通过事件...
在Java中,Socket通信涉及三种不同的模型:BIO(Blocking I/O)、NIO(Non-blocking I/O)和Netty,这些都是实现高并发、高性能网络服务的重要手段。 **1. Socket基础** Socket,通常被称为套接字,是网络通信的...
Mina是一个完全由Java编写的NIO框架,而Netty则是由JBOSS提供的一个高性能的异步事件驱动的网络应用框架,它们都是基于Java反应器模式设计的,用于处理大量并发连接的场景。 综上所述,基于Java NIO的反应器模式...
Netty是Java领域的一款高性能、异步事件驱动的网络应用框架,主要用于快速开发可维护的高性能协议服务器和客户端。这个“Netty权威指南源码-含jar包,导入eclipse直接使用”的压缩包包含了Netty的源代码以及相关jar包...