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 类定义如下。起重机把onReadable
和onShutdown
的声音带来很大的麻烦。
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++服务器项目...
《Reactor 指南中文版》是针对Reactor这一基于JVM的异步应用基础库的详细文档,旨在帮助开发者理解和使用Reactor来构建高性能、低延迟的事件和数据驱动的应用。Reactor库在最新的硬件平台上表现优异,能够每秒处理...
Java编程方法论中,Spring Reactor、Reactor-Netty和Spring Webflux是现代Java开发中用于构建反应式应用程序的关键组件。Spring Reactor是响应式流(Reactive Streams)规范的实现,它提供了用于处理异步事件和数据...
《轻量级C++网络库POCO..."poco-1.7.6-all-doc"这个压缩包中的文档详细阐述了POCO库的各个部分,是学习和使用POCO的重要参考资料。无论你是初次接触C++网络编程,还是寻求更高效的解决方案,POCO都是值得信赖的工具。
linux C++ 基于Reactor事件机制的网络编程框架源码.zip。linux网络编程框架(C++)基于Reactor事件机制,支持线程池,异步非阻塞,高并发,高性能。linux C++ 基于Reactor事件机制的网络编程框架源码.zip。linux网络...
由于Reactor中文版指南是开源中国的众包翻译项目完成的,它的翻译和校对工作由多位贡献者共同完成,包括@viemacs、@静怡芸香、@leoxu、@K6F、@暖冰等。这部分内容表明了开源协作社区在翻译高质量技术文档方面所起到...
Reactor 是一个强大的开源库,它是 Spring Framework 的一部分,用于构建高效的、响应式的应用程序。这个框架专注于异步处理和非阻塞编程,充分利用了 Java 8 和 Reactive Streams 规范。文档主要分为多个部分,详细...
dotNET Reactor 使用步骤图解 dotNET Reactor 是一个功能强大的.NET 保护工具,它可以帮助开发者保护他们的.NET 程序集免受反编译和逆向工程的攻击。下面是 dotNET Reactor 的使用步骤图解: 选择文件 dotNET ...
Reactor 3参考文档,reactor 3是一个围绕Reactive Streams规范构建的库,它在JVM上引入了响应式编程的一个范例。目前Spring5 引入的Webflux就是reactor 3实现的一个响应式web框架
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务...使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架
本篇文章将详细解读Reactor 3的中文帮助文档,帮助用户理解非阻塞响应式框架的使用方法及其原理,尤其是Spring WebFlux底层实现的相关知识。 首先,Reactor 3文档提供了关于该框架的最新版本和版权声明,解释了用户...
Reactor是Spring框架的一部分,它是一个强大的反应式编程库,主要用于构建非阻塞、高并发、响应式的Java应用。Reactor 3 是其最新版本,它遵循了 Reactive Streams 规范,与Java 8及更高版本紧密集成,并在Spring ...
最后,文档提到了《Reactor指南中文版》的翻译贡献者和校对者,他们通过开源中国众包翻译社的努力,将官方文档翻译成中文,以方便中文用户学习和使用Reactor。同时,官方鼓励遵守版权,正确引用和传播翻译版本。 综...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子...linux网络编程框架源码+项目说明(C++)(基于Reactor事件机制,支持线程池,异步非阻塞,高并发,高性能).zip
《C++网络编程 卷1 卷2 ACE程序员指南》是ACE库开发者们的重要参考资料,包含丰富的网络编程知识和实践经验。这套书籍深入探讨了如何使用C++进行高效的网络编程,特别是利用ACE库来简化复杂性的处理。以下是这些书籍...
### Python Twisted网络编程框架知识点解析 #### 一、引言 Twisted 是一个非常强大的异步编程框架,主要用于Python中的网络编程。该框架能够帮助开发者轻松地构建高性能的网络应用,包括但不限于客户端和服务端应用...
Reactor是基于 Reactive Streams 规范的Java库,它提供了多种反应式编程模型,包括Mono(单值序列)和Flux(多值序列)。这些类型使得处理0到N个事件或数据项变得更加简洁和高效。Reactor不仅适用于服务器端应用,也...
.NET Reactor是一款项目知识产权保护软件。它能够使你的程序无法反编译,它可以为你程序生成一套许可证系统。