2011-06-16 27 views
0

這是我的問題:我有一個由Qt GUI和相當多的後端代碼組成的C++應用程序。目前它被鏈接到一個可執行文件並在Solaris上運行。現在,我想在Windows上運行GUI,並讓剩餘的代碼在Solaris上運行(移植它將是一項巨大的工作)。 GUI和後端之間的接口非常乾淨,由一個C++抽象類(也使用一些stl容器)組成。這是我想變成web服務的部分。webservice dispatcher

問題是我們的後端代碼不是線程安全的,因此我需要在Solaris上爲Windows上的每個GUI運行單獨的進程。但是,出於性能方面的原因,我無法啓動和完成GUI的每個請求的處理。

這種設計意味着,我需要採取的幾個問題護理:

  • 必須有GUI代碼的單一聯繫點,
  • 第一通話過程中,溝通必須與實例發生啓動(它應該被路由或者第一次調用應該返回實際服務器實例的地址),
  • 在GUI和服務器進程之間必須有一些保持活動消息來管理服務器進程的生存期(服務器進程不能永遠運行) 。

你能推薦一個框架來處理這些細節(消息路由/調度和生命週期管理)嗎?

回答

1

你可以在技術上配置Apache httpd爲每個連接產生一個新的實例。該配置還允許您管理閒置時進程保持活動狀態的時間以及最少運行多少進程。只要Web服務是無狀態的,這就可以很好地工作。有點奇怪,但技術上可行。

如果您使用類似gSoap的東西,您可以將Solaris中的C++類直接編譯爲gSoap mod,而不必將其調整爲任何前端,如PHP或Java。它會插入Apache httpd並開始工作。

編輯:

我只是想過這個問題,你可能可以使用HTTP 1.1保持活動管理過程的命也。 Apache允許您配置允許保持活動狀態保持打開狀態的時間,這會使連接的線程/進程保持活動狀態。

+0

該服務必須是有狀態的。 apache是​​否能夠將請求發送到適當的進程? – 2011-06-17 07:07:56

+0

這可能有點棘手,但我不知道一個確切的答案。如果這些將成爲網絡農場的一部分,那麼顯而易見的地方就是將會話存儲在共享存儲位置。我確信它可以完成,但我不知道你能從盒子裏得到什麼。 – Nathan 2011-06-17 07:23:52

相關問題