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

 更新时间:2020年06月13日 10:58:50   作者:MrSaber  
这篇文章主要介绍了Java Reactor反应器模式使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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获取登录用户的IP地址示例代码

    Java获取登录用户的IP地址示例代码

    在开发中我们经常需要获取用户IP地址,通过地址来实现一些功能,下面这篇文章主要给大家介绍了关于Java获取登录用户的IP地址的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 详解OAuth2 Token 一定要放在请求头中吗

    详解OAuth2 Token 一定要放在请求头中吗

    这篇文章主要介绍了详解OAuth2 Token 一定要放在请求头中吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • java实现任意矩阵Strassen算法

    java实现任意矩阵Strassen算法

    这篇文章主要介绍了java实现任意矩阵Strassen算法的相关资料,需要的朋友可以参考下
    2016-02-02
  • Java修改eclipse中web项目的server部署路径问题

    Java修改eclipse中web项目的server部署路径问题

    这篇文章主要介绍了Java修改eclipse中web项目的server部署路径,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 详解java 中Spring jsonp 跨域请求的实例

    详解java 中Spring jsonp 跨域请求的实例

    这篇文章主要介绍了详解java 中Spring jsonp 跨域请求的实例的相关资料,jsonp 可用于解决主流浏览器的跨域数据访问的问题,需要的朋友可以参考下
    2017-08-08
  • Java设计模式之适配器模式

    Java设计模式之适配器模式

    这篇文章介绍了Java设计模式之适配器模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • SpringBoot 中 AutoConfiguration的使用方法

    SpringBoot 中 AutoConfiguration的使用方法

    这篇文章主要介绍了SpringBoot 中 AutoConfiguration的使用方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • java实现网页解析示例

    java实现网页解析示例

    这篇文章主要介绍了java实现网页解析示例,需要的朋友可以参考下
    2014-04-04
  • Struts2中Action三种接收参数形式与简单的表单验证功能

    Struts2中Action三种接收参数形式与简单的表单验证功能

    本文以登录验证为例,进行代码展示,下面给大家详细介绍Struts2中Action三种接收参数形式与简单的表单验证功能,需要的朋友参考下
    2017-03-03
  • Java服务调用RestTemplate与HttpClient的使用详解

    Java服务调用RestTemplate与HttpClient的使用详解

    无论是微服务还是SOA,都面临着服务间的远程调用,这篇文章主要介绍了服务调用RestTemplate与HttpClient的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论