【问题标题】:webservice dispatcher网络服务调度程序
【发布时间】:2011-06-16 20:58:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    如果您使用 gSoap 之类的东西,您可以将 Solaris 中的 C++ 类直接编译到 gSoap 模块中,而无需将其适应任何前端,例如 PHP 或 Java。它只需插入 Apache httpd 并开始工作。

    编辑:

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

    【讨论】:

    • 服务必须是有状态的。 apache 能否将请求分派到适当的进程?
    • 这可能有点棘手,但我不知道一个明确的答案。如果这些将成为网络农场的一部分,那么显而易见的地方就是将会话存储在共享存储位置中。我确信它可以完成,但我不知道你可以开箱即用。
    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2011-02-19
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多