网络服务调度员

时间:2011-06-16 20:58:11

标签: c++ web-services routing dispatcher middleware

这是我的问题:我有一个C ++应用程序,它包含Qt GUI和相当多的后端代码。目前,它链接到一个可执行文件并在Solaris上运行。现在,我想在Windows上运行GUI,并在Solaris上运行其余的代码(移植它将是一项巨大的努力)。 GUI和后端之间的接口非常干净,由一个C ++抽象类(也使用一些stl容器)组成。这是我想转变为webservice的部分。

问题是我们的后端代码不是线程安全的,因此我需要在Solaris上为Windows上的每个GUI运行一个单独的进程。但是,出于性能原因,我无法从GUI的每个请求开始和完成处理。

这种设计意味着我需要处理好几个问题:

  • GUI代码必须有一个联系点,
  • 通信必须在第一次调用期间启动的实例中发生(它应该被路由或者第一次调用应该返回实际服务器实例的地址),
  • 在GUI和服务器进程之间必须发送一些保持活动的消息来管理服务器进程的生命周期(服务器进程不能永远运行)。

您能否推荐一个能够处理这些细节的框架(消息路由/调度和生命周期管理)?

1 个答案:

答案 0 :(得分:1)

您可以在技术上配置Apache httpd以为每个连接生成一个新实例。该配置还允许您管理进程在空闲时保持活动的时间,以及至少有多少进程保持运行。只要Web服务是无状态的,这就可以正常工作。有点奇怪,但技术上可行。

如果你使用像gSoap这样的东西,你可以将Solaris中的C ++类直接编译成gSoap mod,而不必将它改编为任何前端,如PHP或Java。它只会插入Apache httpd并开始工作。

编辑:

我只是考虑过它,你可能也可以使用HTTP 1.1 keep-alives来管理流程的生命周期。 Apache允许您配置保持活动状态保持打开的时间,从而使连接的线程/进程保持活动状态。