原文地址: http://rox-xmlrpc.sourceforge.net/niotut/
1. Use a single selecting thread
使用单线程处理selectors, selectors are threadsafe their key sets are not
2. Modify the selector from the selecting thread only
从选择线程里修改selector
3. Set OP_WRITE only when you have data ready
仅仅准备好写数据的时候, 才设置OP_WRITE
4. Alternate between OP_READ and OP_WRITE
在OP_READ和OP_WRITE之间交替处理
流程:
1. Server端:
(1) 创建一个包含Selector的线程
(2) 初始化Selector, bind服务器端的channel, 此channel监听OP_ACCEPT
(3) 当有链接进程来, 创建channel, selector上监听此chanel的OP_READ
(4) channel上有数据进来后, 读取数据, 扔给业务线程处理此channel的数据, 最后, 回写数据时,
将数据传递给Selector线程, 特别注意, 回写时, 要wakeup() selector, 避免一直在OP_ACCEPT和
OP_READ上等待
(5) selector上要写数据的channel, 改为监听OP_WRITE
(6) 向channel里写数据, 若数据写完, 则改监听为OP_READ
2. Client端:
(1) 创建一个Selector
(2) 发送数据之前, 创建到服务器段的链接, 注册并添加OP_CONNECT的监听, 同时先缓存要写的数据, selector要被wakeup, 方便处理建立链接的监听
(3) 若简历链接成功, 完成连接建立, 改为监听OP_WRITE
(4) 当要发送的数据完成后, 改监听为OP_READ
(5) 读取数据, 并处理
只要不是selector的select后续的处理, 其他异步的写数据, client建立链接等, 均需要调用selector的wakeup
相关推荐
通过本教程,我们不仅了解了Netty的基础概念,还通过实际代码示例学习了如何使用Netty构建一个简单的服务器和客户端应用程序。这对于理解Netty的工作原理和如何在实际项目中应用Netty都是非常有帮助的。
Java NIO 框架 Netty 是业界最流行的 NIO 框架之一,具有良好的健壮性、功能、性能、可定制性和可扩展性。Netty 提供了简单的 API,大大简化了我们的网络编程。本文将介绍 Java NIO 框架 Netty 的简单使用示例,通过...
在`Server.java`这个文件中,我们可以预期它会包含一个简单的NIO服务器实现。通常,这样的服务器会包含以下组件: 1. **服务器端口绑定**:使用`ServerSocketChannel`打开并绑定到特定端口,监听客户端连接。 2. **...
Netty提供了快速搭建网络服务器的能力,其中最简单的例子就是编写一个丢弃服务器(Discard Server),该服务器接收到任何数据都会直接丢弃。 ##### 4.2 查看接收的数据 在Netty中,可以很容易地查看接收到的数据。...
通过以上步骤,你已经掌握了Java Socket编程的基本知识,包括Socket和ServerSocket的使用,以及如何创建简单的客户端-服务器通信模型。在进一步学习中,你还可以探索TCP和UDP协议的区别,以及如何处理更复杂的网络...
要创建一个简单的Java Socket程序,我们需要分别实现服务器端(Server)和客户端(Client)。 1. **服务器端(Server)**: - 首先,我们需要创建一个ServerSocket对象,指定一个监听的端口号。例如: ```java ...
在本例中,可能是使用Java的Socket编程或者NIO(非阻塞I/O)来实现网络通信。 4. **负载均衡**: 当有多个服务实例时,RPC框架需要决定请求发送到哪个实例。这可以通过轮询、随机、权重等策略实现。简单的RPCDemo...
Lambda表达式是Java8最具革命性的新特性之一。它使得代码更加简洁、可读性更强。Lambda表达式允许我们把函数作为方法的参数(函数式接口)。这对于编写简洁高效代码尤为重要。 - **语法格式**:`() -> {}` - **使用...
在这个压缩包中,我们看到了Step1Server.java和Step2Server.java这样的文件名,这可能代表了服务器端Socket编程的不同阶段。通常,Socket编程包括创建Socket,绑定到特定IP和端口,监听连接请求,接收客户端数据,...
而"HttpServer"文件可能是一个更复杂的实现,可能采用了高级的并发控制机制,比如Java的`ExecutorService`和`ThreadPoolExecutor`,或者是非阻塞I/O模型如NIO(非阻塞输入/输出)。 学习这些示例可以帮助你理解HTTP...
Java的Socket编程是网络编程的基础,它允许两个网络应用程序之间建立通信链接,进行数据传输。在Java中,Socket是java...实际开发中,还可以结合NIO(非阻塞I/O)或其他高级框架如Netty,提高网络通信的效率和灵活性。
**开发一个简单的Server-Client模型程序**: - **服务器端**:服务器首先创建一个ServerSocket,指定监听的端口,然后调用`accept()`方法进入等待状态。当接收到客户端连接请求时,accept方法返回一个新的Socket,...
此外,为了使服务器能够处理多个并发的客户端请求,服务器通常会采用多线程、多进程或者异步I/O模型,比如Java的NIO(非阻塞I/O)、Node.js的事件驱动模型或者Python的asyncio库。这样,服务器可以在不阻塞其他连接...
压缩包中的"Java TCP/IP Socket编程.pdf"很可能是详细的教程或示例代码,包括如何创建简单的聊天服务器或文件传输应用等。 总的来说,Java TCP/IP Socket编程涉及网络编程的基本原理和Java API的使用,是开发分布式...
在Java编程语言中,开发一个简单的Web服务器是学习网络编程和HTTP协议的很好起点。这个项目,名为"JAVA-WebServer",旨在帮助开发者理解如何使用Java实现一个基础的Web服务器,以处理HTTP请求并返回相应的HTTP响应。...
**TCP/IP协议栈** 包括了多个层次,其中最核心的是传输层的TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠的、面向连接的服务,而UDP提供不可靠的、无连接的服务。 #### 三、TCP协议详解 **TCP协议** ...
Mina的核心优势在于其事件驱动和异步操作的编程模型,这得益于它默认采用的Java NIO作为底层基础。通过Mina,开发者能够快速地开发出可扩展且高效的网络应用程序,而无需过多关注底层网络通信的复杂性。 在Mina 2.0...
它提供了一个事件驱动、异步IO操作的编程模型,采用Java NIO作为底层支持。Mina框架可以用于开发需要进行网络通信的应用程序,无论是服务端还是客户端。 在Mina框架中,主要分为两个版本:1.x和2.x。文档中提到的是...
综上所述,"HttpServer_Java"项目涵盖了Java服务器开发的多个核心知识点,包括HTTP协议处理、Java NIO、线程管理、事件驱动编程、配置文件解析、类库设计以及性能优化等。通过深入学习和实践这个项目,开发者可以...