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++服务器项目...
linux C++ 基于Reactor事件机制的网络编程框架源码.zip。linux网络编程框架(C++)基于Reactor事件机制,支持线程池,异步非阻塞,高并发,高性能。linux C++ 基于Reactor事件机制的网络编程框架源码.zip。linux网络...
reactor框架推送式框架文档
Reactor 3参考文档,reactor 3是一个围绕Reactive Streams规范构建的库,它在JVM上引入了响应式编程的一个范例。目前Spring5 引入的Webflux就是reactor 3实现的一个响应式web框架
reactor指南中文版,超详细
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务...使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架
C++网络库POCO的文档。POCO是轻量级的网络库,适用于网络开发,如HTTP等
2. 同步过程强制每个线程执行停-检查操作 3. 消息的消费可能比生产慢 4. 使用线程池(ThreadPool)将任务传递给目标线程 -- 通过 Future
ChannelPool 设计实现解读 ... ChannelPool ,顾名思义,就是一个管理 channel 的容器,里面包含了从容器里获取 channel , 将使用的 channel 放回容器中,还有一个就是关闭容器,于是,就有下面这个接口设计:
.NET Reactor是一款项目知识产权保护软件。它能够使你的程序无法反编译,它可以为你程序生成一套许可证系统。
Reactor 3 参考文档
Reactor3中文帮助文档,帮助初学者了解非阻塞响应式式框架的使用以及原理,帮助了解spring webflux的一些底层实现原理
赠送jar包:reactor-core-3.4.10.jar; 赠送原API文档:reactor-core-3.4.10-javadoc.jar; 赠送源代码:reactor-core-3.4.10-sources.jar; 赠送Maven依赖信息文件:reactor-core-3.4.10.pom; 包含翻译后的API文档...
NET REACTOR中文手册
Reactor 指南,全面描述Reactor原理,应用,以及不同平台的实现
Net-Reactor使用界面.doc
展示如何使用Reactor框架的一组示例。 有两个示例显示了文件字处理器,该文件字处理器将对一组给定文件中的字数进行计数。 文字处理器的过程是: 阻止所有单词 删除所有停用词(a,the等) 完成此操作后,打印出...
使用Reactor进行动手React式编程 这是Packt发布的“ 进行的代码库。 使用Reactor框架构建React式和可扩展的微服务这本书是关于什么的? Reactor是Java 9 Reactive Streams规范的实现,Java 9 Reactive Streams规范是...
Reactor 是一个基于 JVM 之上的异步应用基础库。为 Java 、Groovy 和其他 JVM 语言提供了构建基于事件和数据驱动应用的抽象库。Reactor 性能相当高,在最新的硬件平台上,使用无堵塞分发器每秒钟可处理 1500 万事件...