`
Poechant
  • 浏览: 229703 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24333
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22105
社区版块
存档分类
最新评论

POCO库中文编程参考指南(11)如何使用Reactor框架?

 
阅读更多

POCO库中文编程参考指南(11)如何使用Reactor框架?

  • Author: 柳大·Poechant(钟超)
  • Email: zhongchao.ustc#gmail.com (#->@)
  • Blog:Blog.CSDN.net/Poechant
  • Date: April 21th, 2012

1 Reactor 框架概述

POCO 中的 Reactor 框架是基于 Reactor 设计模式进行设计的。其中由 Handler 将某 Socket 产生的事件,发送到指定的对象的方法上,作为回调。

2 光说不练假把式

PoechantReactorServer 类,基本与 PoechantTCPServer:

class PoechantReactorServer: public ServerApplication
{
public:
    PoechantServer() {} //: _helpRequested(false) {}
    ~PoechantServer() {}

protected:
    void initialize(Application& self)
    {
        loadConfiguration();
        ServerApplication::initialize(self);
    }
    void uninitialize()
    {
        ServerApplication::uninitialize();
    }
    int main(const std::vector<std::string>& args)
    {
        // …
        return Application::EXIT_OK;
    }
}

PoechantServiceHandler 类定义如下。起重机把onReadableonShutdown的声音带来很大的麻烦。

class PoechantServiceHandler
{
public:
    PoechantServiceHandler(StreamSocket& socket, SocketReactor& reactor);
    ~PoechantServiceHandler();
    void onReadable(const AutoPtr<ReadableNotification>& pNf);
    void onShutdown(const AutoPtr<ShutdownNotification>& pNf);
private:
    enum
    {
        BUFFER_SIZE = 1024
    };
    StreamSocket _socket;
    SocketReactor& _reactor;
    char *_pBuffer;
};

PoechantServiceHandler 实现:

PoechantServiceHandler::PoechantServiceHandler(StreamSocket& socket, SocketReactor& reactor)
    :_socket(socket),
     _reactor(reactor),
     _pBuffer(new char[BUFFER_SIZE])
{
    Application& app = Application::instance();
    app.logger().information("Connection from" + socket.peerAddress().toString());
    _reactor.addEventHandler(_socket,
        NObserver<PoechantServiceHandler,
            ReadableNotification>(*this, &PoechantServiceHandler::onReadable));
    _reactor.addEventHandler(_socket,
        NObserver<PoechantServiceHandler,
            ShutdownNotification>(*this, &PoechantServiceHandler::onShutdown));
}
~PoechantServiceHandler()
{
    Application& app = Application::instance();
    app.logger().information("Disconnecting " + _socket.peerAddress().toString());
    _reactor.removeEventHandler(_socket,
        NObserver<PoechantServiceHandler,
            ReadableNotification>(*this, &PoechantServiceHandler::onReadable));
    _reactor.removeEventHandler(_socket,
        NObserver<PoechantServiceHandler,
            ShutdownNotification>(*this, &PoechantServiceHandler::onShutdown));
    delete [] _pBuffer;
}
void onReadable(const AutoPtr<ReadableNotification>& pNf)
{
    // Receive data from StreamSocket
    int n = _socket.receiveBytes(_pBuffer, BUFFER_SIZE);

    // Send data back the client 
    if (n > 0)
        _socket.sendBytes(_pBuffer, n);
    else
        delete this;
}

// When ShutdownNotification is detected, this method will be invoked.
void onShutdown(const AutoPtr<ShutdownNotification>& pNf)
{
    delete this;
}

启动:

int main(const std::vector<std::string>& args)
{
    unsigned short port = (unsigned short) config().getInt("PoechantReactor.port", 12345);
    ServerSocket serverSocket(port);
    SocketReactor reactor;
    SocketAcceptor<PoechantServiceHandler> acceptor(serverSocket, reactor);

    reactor.run();

    waitForTerminationRequest();
    reactor.stop();

    return Application::EXIT_OK;
}

int main(int argc, char **argv)
{
    return PoechantServer().run(argc, argv);
}

3 Clinet 测试代码

《POCO库中文编程参考指南(10)如何使用TCPServer框架?》中的 Client 测试用例。

-

转载请注明来自柳大的CSDN博客:Blog.CSDN.net/Poechant

-

分享到:
评论

相关推荐

    基于Reactor框架的C++服务器项目.zip

    基于Reactor框架的C++服务器项目.zip基于Reactor框架的C++服务器项目.zip基于Reactor框架的C++服务器项目.zip基于Reactor框架的C++服务器项目.zip基于Reactor框架的C++服务器项目.zip基于Reactor框架的C++服务器项目...

    Reactor+指南中文版_2.01

    《Reactor 指南中文版》是针对Reactor这一基于JVM的异步应用基础库的详细文档,旨在帮助开发者理解和使用Reactor来构建高性能、低延迟的事件和数据驱动的应用。Reactor库在最新的硬件平台上表现优异,能够每秒处理...

    Java编程方法论 之 Spring Reactor Reactor-Netty Spring Webflux 全面解读.pdf

    Java编程方法论中,Spring Reactor、Reactor-Netty和Spring Webflux是现代Java开发中用于构建反应式应用程序的关键组件。Spring Reactor是响应式流(Reactive Streams)规范的实现,它提供了用于处理异步事件和数据...

    轻量级C++网络库poco文档

    《轻量级C++网络库POCO..."poco-1.7.6-all-doc"这个压缩包中的文档详细阐述了POCO库的各个部分,是学习和使用POCO的重要参考资料。无论你是初次接触C++网络编程,还是寻求更高效的解决方案,POCO都是值得信赖的工具。

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

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

    reactor指南中文版

    由于Reactor中文版指南是开源中国的众包翻译项目完成的,它的翻译和校对工作由多位贡献者共同完成,包括@viemacs、@静怡芸香、@leoxu、@K6F、@暖冰等。这部分内容表明了开源协作社区在翻译高质量技术文档方面所起到...

    reactor框架推送式框架文档

    Reactor 是一个强大的开源库,它是 Spring Framework 的一部分,用于构建高效的、响应式的应用程序。这个框架专注于异步处理和非阻塞编程,充分利用了 Java 8 和 Reactive Streams 规范。文档主要分为多个部分,详细...

    dotNET Reactor 使用步骤图解

    dotNET Reactor 使用步骤图解 dotNET Reactor 是一个功能强大的.NET 保护工具,它可以帮助开发者保护他们的.NET 程序集免受反编译和逆向工程的攻击。下面是 dotNET Reactor 的使用步骤图解: 选择文件 dotNET ...

    Reactor 3 参考文档.pdf

    Reactor 3参考文档,reactor 3是一个围绕Reactive Streams规范构建的库,它在JVM上引入了响应式编程的一个范例。目前Spring5 引入的Webflux就是reactor 3实现的一个响应式web框架

    使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架.zip

    Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务...使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架

    Reactor 3中文帮助文档

    本篇文章将详细解读Reactor 3的中文帮助文档,帮助用户理解非阻塞响应式框架的使用方法及其原理,尤其是Spring WebFlux底层实现的相关知识。 首先,Reactor 3文档提供了关于该框架的最新版本和版权声明,解释了用户...

    Reactor 3 参考文档

    Reactor是Spring框架的一部分,它是一个强大的反应式编程库,主要用于构建非阻塞、高并发、响应式的Java应用。Reactor 3 是其最新版本,它遵循了 Reactive Streams 规范,与Java 8及更高版本紧密集成,并在Spring ...

    Reactor指南中文版 2.0

    最后,文档提到了《Reactor指南中文版》的翻译贡献者和校对者,他们通过开源中国众包翻译社的努力,将官方文档翻译成中文,以方便中文用户学习和使用Reactor。同时,官方鼓励遵守版权,正确引用和传播翻译版本。 综...

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

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子...linux网络编程框架源码+项目说明(C++)(基于Reactor事件机制,支持线程池,异步非阻塞,高并发,高性能).zip

    C++网络编程 卷1 卷2 ACE程序员指南 带详细目录

    《C++网络编程 卷1 卷2 ACE程序员指南》是ACE库开发者们的重要参考资料,包含丰富的网络编程知识和实践经验。这套书籍深入探讨了如何使用C++进行高效的网络编程,特别是利用ACE库来简化复杂性的处理。以下是这些书籍...

    Python Twisted网络编程框架(中文)

    ### Python Twisted网络编程框架知识点解析 #### 一、引言 Twisted 是一个非常强大的异步编程框架,主要用于Python中的网络编程。该框架能够帮助开发者轻松地构建高性能的网络应用,包括但不限于客户端和服务端应用...

    配套响应式编程代码reactor-flux

    Reactor是基于 Reactive Streams 规范的Java库,它提供了多种反应式编程模型,包括Mono(单值序列)和Flux(多值序列)。这些类型使得处理0到N个事件或数据项变得更加简洁和高效。Reactor不仅适用于服务器端应用,也...

    .NET REACTOR中文使用文档

    .NET Reactor是一款项目知识产权保护软件。它能够使你的程序无法反编译,它可以为你程序生成一套许可证系统。

Global site tag (gtag.js) - Google Analytics