Java Reactor反应器模式使用方法详解

 更新时间:2020-06-14 04:45:39   作者:佚名   我要评论(0)

Reactor反应器模式


到目前为止,高性能网络编程都绕不开反应器模式。很多著名的服务器软件或者中间件都是基于反应器模式实现的,如Nginx、Redis、Netty。
反应器

Reactor反应器模式

到目前为止,高性能网络编程都绕不开反应器模式。很多著名的服务器软件或者中间件都是基于反应器模式实现的,如Nginx、Redis、Netty。

反应器模式是高性能网络编程的必知、必会的模式。

Reactor简介

反应器模式由Reactor反应器线程、Handlers处理器两大角色组成:

(1)Reactor反应器线程的职责:负责响应IO事件,并且分发到Handlers处理器。

(2)Handlers处理器的职责:非阻塞的执行业务处理逻辑。

  从上面的反应器模式定义,看不出这种模式有什么神奇的地方。当然,从简单到复杂,反应器模式也有很多版本。根据前面的定义,仅仅是最为简单的一个版本。

多线程OIO的致命缺陷

在Java的OIO编程中,最初和最原始的网络服务器程序,是用一个while循环,不断地监听端口是否有新的连接。如果有,就调用一个和处理函数来完成,示例代码如下:

@Test
 public void client() throws IOException {
   Socket client = new Socket("127.0.0.1", 9999);
   Writer writer = new OutputStreamWriter(client.getOutputStream());
   writer.write("Hello World");
   writer.flush();
   writer.close();
   client.close();
 }
 
 @Test
 public void server() throws IOException {
   ServerSocket server = new ServerSocket(9999);
   while (true){
     Socket socket = server.accept();
     Reader reader = new InputStreamReader(socket.getInputStream());
     print(reader);
     reader.close();
     socket.close();
     server.close();
   }
 }

这种方法的最大问题是:如果前一个网络连接的handle(socket)没有处理完,那么后面的连接请求没法被接收,于是后面的请求通通会被阻塞住,服务器的吞吐量就太低了。对于服务器来说,这是一个严重的问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • 简单了解Java Netty Reactor三种线程模型
  • 详解Python的Twisted框架中reactor事件管理器的用法
  • Reactor反应器的实现方法详解
  • ACE反应器(Reactor)模式的深入分析
  • 学前端,css与javascript重难点浅析
  • 详解java中的阻塞队列
  • Java实现8种排序算法的示例代码

相关文章

  • Java Reactor反应器模式使用方法详解

    Java Reactor反应器模式使用方法详解

    Reactor反应器模式 到目前为止,高性能网络编程都绕不开反应器模式。很多著名的服务器软件或者中间件都是基于反应器模式实现的,如Nginx、Redis、Netty。 反应器
    2020-06-14
  • Java类加载机制实现流程及原理详解

    Java类加载机制实现流程及原理详解

    前言   我们知道,Java项目编译后会生成许许多多的class文件,class文件保存着类的描述信息。虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转化
    2020-06-14
  • Python celery原理及运行流程解析

    Python celery原理及运行流程解析

    celery简介 celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它的执行单元为任务(task),利用多线程,如Eventlet,gevent
    2020-06-14
  • Django QuerySet查询集原理及代码实例

    Django QuerySet查询集原理及代码实例

    一 概念 Django的ORM中存在查询集的概念。 查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django会返回查询集(而
    2020-06-14
  • Python Django中间件使用原理及流程分析

    Python Django中间件使用原理及流程分析

    一、什么是Django中间件   Django 中间件是用来处理Django的请求request和响应response的框架级别的钩子,它是一个轻量,低级别的插件系统,用于全局范围内改变
    2020-06-14
  • Pandas缺失值2种处理方式代码实例

    Pandas缺失值2种处理方式代码实例

    处理方式: 存在缺失值nan,并且是np.nan: 删除存在缺失值的:dropna(axis='rows') 替换缺失值:fillna(df[].mean(), inplace=True) 不是缺失值nan,有默认标
    2020-06-14
  • php获取小程序码的实现代码(B类接口)

    php获取小程序码的实现代码(B类接口)

    效果图 生成小程序码的php代码 public function qrcode(){ $member_id = session('id'); if(empty($member_id)) $this->error('请先登录'); //推广
    2020-06-14
  • PyInstaller运行原理及常用操作详解

    PyInstaller运行原理及常用操作详解

    pyinstaller 属于Python第三方库,使用前需先安装 # 首先安装pyinstaller pip install pyinstaller PyInstaller生成可执行程序 # PyInstaller 工具的命
    2020-06-14
  • Python轻量级web框架bottle使用方法解析

    Python轻量级web框架bottle使用方法解析

    Bottle是一个轻量级的Web框架,此框架只由一个 bottle.py 文件构成,不依赖任何第三方模块。 #!/usr/bin/env python # -*- coding:utf-8 -*- from bottle import
    2020-06-14
  • Python xpath表达式如何实现数据处理

    Python xpath表达式如何实现数据处理

    xpath表达式 1. xpath语法 <bookstore> <book> <title lang="eng">Harry Potter</title> <price>999</price> </book> <book> <title lang="eng">Learning X
    2020-06-14

最新评论