`

cindy源码阅读(8)Reactor

阅读更多
public interface Reactor {

    void register(ReactorHandler handler);

    void deregister(ReactorHandler handler);

    void interest(ReactorHandler handler, int ops);


看起来Reactor 是蛮简单的,但是却是困惑我最久的地方。

  public void run() {
                    try {
                        while (!close) {
                            beforeSelect();
                            if (close) // after beforeSelect, close may be true
                                break;
                            try {
                                selector.select(SELECT_TIMEOUT);
                            } catch (IOException e) {
                                log.error(e, e);
                                break;
                            }
                            afterSelect();
                        }
                    } finally {
                        DefaultReactor.this.stop();
                    }
                }

Reactor启动之后,会不停的通过selector去查看各个频道的状态,然后通过ReactorHandler 执行对应状态的操作。

private void processSelectedKeys() {
        for (Iterator iter = selector.selectedKeys().iterator(); iter.hasNext();) {
            SelectionKey key = (SelectionKey) iter.next();
            iter.remove();

            key.interestOps(key.interestOps() & ~key.readyOps());
            Attachment attachment = (Attachment) key.attachment();
            ReactorHandler handler = attachment.handler;

            if (key.isWritable()) // do not check session timeout when writing
                attachment.writing = true;

            if (key.isAcceptable())
                handler.onAcceptable();
            if (key.isConnectable())
                handler.onConnectable();
            if (key.isValid() && key.isReadable())
                handler.onReadable();
            if (key.isValid() && key.isWritable())
                handler.onWritable();
        }
    }


那session的sockerchannel怎么和selector产生联系呢。通过register和deregister方法。那状态的改变呢,是通过interest方法。

ReactorHandler是怎么执行的呢。基本上是通过SessionFilterChain执行对应的方法。SessionFilter可以直接通过session添加:session.addSessionFilter(XXX);
分享到:
评论

相关推荐

    java基于NIO实现Reactor模型源码.zip

    java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...

    reactor模式源码

    在阅读和理解Reacttor模式的源码时,重点应该关注以下几点: 1. **事件注册与注销机制**:如何高效地添加和删除事件处理器,以及如何保持这些处理器的关联信息。 2. **事件分发策略**:Reacttor如何决定哪个事件...

    基于Reactor高并发服务器 c++源码+详细项目说明+sln解决方案.zip

    基于Reactor高并发服务器 c++源码+详细项目说明+sln解决方案.zip基于Reactor高并发服务器 c++源码+详细项目说明+sln解决方案.zip基于Reactor高并发服务器 c++源码+详细项目说明+sln解决方案.zip基于Reactor高并发...

    reactor-netty-core-1.0.15-API文档-中文版.zip

    赠送jar包:reactor-netty-core-1.0.15.jar; 赠送原API文档:reactor-netty-core-1.0.15-javadoc.jar; 赠送源代码:reactor-netty-core-1.0.15-sources.jar; 赠送Maven依赖信息文件:reactor-netty-core-1.0.15....

    基于主从reactor模型的高并发服务器项目C++源码.zip

    基于主从reactor模型的高并发服务器项目C++源码.zip基于主从reactor模型的高并发服务器项目C++源码.zip基于主从reactor模型的高并发服务器项目C++源码.zip基于主从reactor模型的高并发服务器项目C++源码.zip基于主从...

    reactor-netty-http-1.0.11-API文档-中文版.zip

    赠送jar包:reactor-netty-http-1.0.11.jar; 赠送原API文档:reactor-netty-http-1.0.11-javadoc.jar; 赠送源代码:reactor-netty-http-1.0.11-sources.jar; 赠送Maven依赖信息文件:reactor-netty-...

    reactor-extra-3.4.6-API文档-中文版.zip

    赠送jar包:reactor-extra-3.4.6.jar; 赠送原API文档:reactor-extra-3.4.6-javadoc.jar; 赠送源代码:reactor-extra-3.4.6-sources.jar; 赠送Maven依赖信息文件:reactor-extra-3.4.6.pom; 包含翻译后的API文档...

    .Net Reactor v5.9.8.0 源码加密

    .Net Reactor v5.9.8.0 是一款强大的源码保护工具,专门用于C#项目的源码加密和混淆,以防止未经授权的访问、反编译或篡改。这款工具的核心功能包括对IL代码(Intermediate Language)的保护,字符串加密,代码混淆...

    一款基于go语言实现的reactor模型的微服务式分布式游戏架构

    一款基于go语言实现的reactor模型的微服务式分布式游戏架构,继承了很多c++游戏架构的思想,结合go语言的轻便与开发效率,与主流中间件的完美搭配,适用于中小型游戏,mmo等游戏.zip 源码是经过本地编译可运行的,...

    C和C++实现和封装不同的网络 IO 模型源码(如 epoll、reactor、io_uring 和 proactor).zip

    C和C++实现和封装不同的网络 IO 模型源码(如 epoll、reactor、io_uring 和 proactor).zip 【说明】 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请...

    reactor-core-源码.rar

    《深入解析Reactor-Core源码》 Reactor-Core是Spring框架中的一个关键组件,它是响应式编程库Reactor的核心部分,广泛应用于Java的异步...通过阅读源码,我们可以学习到如何设计和实现一个高效、灵活的反应式流系统。

    基于muduo网络库Reactor模型的集群聊天源码+项目说明.zip

    基于muduo网络库Reactor模型的集群聊天源码+项目说明.zip基于muduo网络库Reactor模型的集群聊天源码+项目说明.zip基于muduo网络库Reactor模型的集群聊天源码+项目说明.zip基于muduo网络库Reactor模型的集群聊天源码+...

    .NET Reactor 4.9 破解版

    .NET Reactor是一款功能强大的代码保护以及许可授权管理系统软件,主要用于开发人员保护其.NET软件程序,.NET Reactor支持所有支持.NET编译的程序开发语言。 .NET Reactor 4.9是目前最新版本,由大神yoza破解,亲测...

    linux C++ 基于Reactor事件机制的网络编程框架源码.zip

    linux C++ 基于Reactor事件机制的网络编程框架源码.zip。linux网络编程框架(C++)基于Reactor事件机制,支持线程池,异步非阻塞,高并发,高性能。linux C++ 基于Reactor事件机制的网络编程框架源码.zip。linux网络...

    Java NIO——Selector机制解析三(源码分析)

    本文将深入探讨Java NIO中的Selector机制,并通过源码分析来理解其实现原理。 Selector机制是Java NIO中的核心组件,它允许单线程同时监控多个通道(Channels)的状态变化,例如连接就绪、数据可读或可写等。这种...

    基于Reactor模型+线程池的httpserver(完整源码+说明).zip

    【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、...

    Netty核心精讲之Reactor线程模型源码分析.mp4

    在深入探讨Netty的Reactor线程模型源码之前,我们需要先理解Reactor模式的基本概念。 Reactor模式是一种设计模式,常用于处理并发I/O事件。在多路复用I/O(如epoll、kqueue)中,Reactor模式是关键组成部分,它负责...

    基于Reactor的高并发服务器c++和c源码+超详细项目说明+sln解决方案.zip

    基于Reactor的高并发服务器c++和c源码+超详细项目说明+sln解决方案.zip基于Reactor的高并发服务器c++和c源码+超详细项目说明+sln解决方案.zip基于Reactor的高并发服务器c++和c源码+超详细项目说明+sln解决方案.zip...

    Reactor 3中文帮助文档

    文档以一系列问题的形式引导用户如何开始阅读,例如:"什么是Reactor?","需要哪些前提条件?",以及"如何获取Reactor"等。 接下来是关于响应式编程的介绍,文档解释了阻塞操作对资源的浪费,异步编程如何能解决...

Global site tag (gtag.js) - Google Analytics