`
jimmee
  • 浏览: 538736 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

最简单的nio server编程

阅读更多

原文地址: 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

 

分享到:
评论

相关推荐

    Java NIO框架Netty教程.pdf

    通过本教程,我们不仅了解了Netty的基础概念,还通过实际代码示例学习了如何使用Netty构建一个简单的服务器和客户端应用程序。这对于理解Netty的工作原理和如何在实际项目中应用Netty都是非常有帮助的。

    Java NIO框架Netty简单使用的示例

    Java NIO 框架 Netty 是业界最流行的 NIO 框架之一,具有良好的健壮性、功能、性能、可定制性和可扩展性。Netty 提供了简单的 API,大大简化了我们的网络编程。本文将介绍 Java NIO 框架 Netty 的简单使用示例,通过...

    (NIO)just for my own reference

    在`Server.java`这个文件中,我们可以预期它会包含一个简单的NIO服务器实现。通常,这样的服务器会包含以下组件: 1. **服务器端口绑定**:使用`ServerSocketChannel`打开并绑定到特定端口,监听客户端连接。 2. **...

    netty 新NIO框架 文档

    Netty提供了快速搭建网络服务器的能力,其中最简单的例子就是编写一个丢弃服务器(Discard Server),该服务器接收到任何数据都会直接丢弃。 ##### 4.2 查看接收的数据 在Netty中,可以很容易地查看接收到的数据。...

    三步学会Java Socket编程.doc

    通过以上步骤,你已经掌握了Java Socket编程的基本知识,包括Socket和ServerSocket的使用,以及如何创建简单的客户端-服务器通信模型。在进一步学习中,你还可以探索TCP和UDP协议的区别,以及如何处理更复杂的网络...

    使用java实现socket编程

    要创建一个简单的Java Socket程序,我们需要分别实现服务器端(Server)和客户端(Client)。 1. **服务器端(Server)**: - 首先,我们需要创建一个ServerSocket对象,指定一个监听的端口号。例如: ```java ...

    最简单的RPC框架源码.zip

    在本例中,可能是使用Java的Socket编程或者NIO(非阻塞I/O)来实现网络通信。 4. **负载均衡**: 当有多个服务实例时,RPC框架需要决定请求发送到哪个实例。这可以通过轮询、随机、权重等策略实现。简单的RPCDemo...

    Java8新特性&Shiro&NIO&Redis分享

    Lambda表达式是Java8最具革命性的新特性之一。它使得代码更加简洁、可读性更强。Lambda表达式允许我们把函数作为方法的参数(函数式接口)。这对于编写简洁高效代码尤为重要。 - **语法格式**:`() -> {}` - **使用...

    计算机网络-source.zip

    在这个压缩包中,我们看到了Step1Server.java和Step2Server.java这样的文件名,这可能代表了服务器端Socket编程的不同阶段。通常,Socket编程包括创建Socket,绑定到特定IP和端口,监听连接请求,接收客户端数据,...

    http server服务器

    而"HttpServer"文件可能是一个更复杂的实现,可能采用了高级的并发控制机制,比如Java的`ExecutorService`和`ThreadPoolExecutor`,或者是非阻塞I/O模型如NIO(非阻塞输入/输出)。 学习这些示例可以帮助你理解HTTP...

    有关Java的Socket编程入门例子

    Java的Socket编程是网络编程的基础,它允许两个网络应用程序之间建立通信链接,进行数据传输。在Java中,Socket是java...实际开发中,还可以结合NIO(非阻塞I/O)或其他高级框架如Netty,提高网络通信的效率和灵活性。

    三步学会Java Socket编程

    **开发一个简单的Server-Client模型程序**: - **服务器端**:服务器首先创建一个ServerSocket,指定监听的端口,然后调用`accept()`方法进入等待状态。当接收到客户端连接请求时,accept方法返回一个新的Socket,...

    server-client-src_网络通讯_

    此外,为了使服务器能够处理多个并发的客户端请求,服务器通常会采用多线程、多进程或者异步I/O模型,比如Java的NIO(非阻塞I/O)、Node.js的事件驱动模型或者Python的asyncio库。这样,服务器可以在不阻塞其他连接...

    Java TCP_IP Socket编程.rar

    压缩包中的"Java TCP/IP Socket编程.pdf"很可能是详细的教程或示例代码,包括如何创建简单的聊天服务器或文件传输应用等。 总的来说,Java TCP/IP Socket编程涉及网络编程的基本原理和Java API的使用,是开发分布式...

    JAVA-WebServer:JAVA 中的简单 Web 服务器

    在Java编程语言中,开发一个简单的Web服务器是学习网络编程和HTTP协议的很好起点。这个项目,名为"JAVA-WebServer",旨在帮助开发者理解如何使用Java实现一个基础的Web服务器,以处理HTTP请求并返回相应的HTTP响应。...

    java编程socket通信

    **TCP/IP协议栈** 包括了多个层次,其中最核心的是传输层的TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠的、面向连接的服务,而UDP提供不可靠的、无连接的服务。 #### 三、TCP协议详解 **TCP协议** ...

    Apache-Mina-Server-2.0中文参考手册V1.0.docx

    Mina的核心优势在于其事件驱动和异步操作的编程模型,这得益于它默认采用的Java NIO作为底层基础。通过Mina,开发者能够快速地开发出可扩展且高效的网络应用程序,而无需过多关注底层网络通信的复杂性。 在Mina 2.0...

    Mina中文参考手册-API

    它提供了一个事件驱动、异步IO操作的编程模型,采用Java NIO作为底层支持。Mina框架可以用于开发需要进行网络通信的应用程序,无论是服务端还是客户端。 在Mina框架中,主要分为两个版本:1.x和2.x。文档中提到的是...

    HttpServer_Java:用Java实现的简单Http服务器,可以当作类库使用,配置文件在settings.xml

    综上所述,"HttpServer_Java"项目涵盖了Java服务器开发的多个核心知识点,包括HTTP协议处理、Java NIO、线程管理、事件驱动编程、配置文件解析、类库设计以及性能优化等。通过深入学习和实践这个项目,开发者可以...

Global site tag (gtag.js) - Google Analytics