2011-05-05 84 views
1

我正在開發在C數據庫連接的Linux守護++將充當「服務器」對於某些網絡控制器設備。它必須具有某種形式的併發才能同時爲多個設備提供服務。服務器將偵聽每個連接設備的傳入連接和fork/thread/select()/無論什麼。此連接應保持打開狀態,直到它斷開或關閉。客戶端不會是多線程的,所以它們一次只能有一個連接。模型多線程/叉服務器守護程序

該項目需要一個設備能夠聯繫「服務器」與將被處理,通常包括數據庫查詢命令,並反過來,發送命令到網絡設備中的另一個。數據庫查詢將確定要與哪個其他客戶端通話。然後我必須通過與該線程的現有連接來找到它所連接的進程或線程,並與設備進行通信。在一臺設備

認爲,一些形式的「授權」的波及另一裝置接收命令,做一些事情。我不能只在設備之間發送「點對點」命令,因爲所有事情都必須記錄在服務器上,並且數據庫查詢可能是必需的。

我通過線程/進程之間的通信困惑。我預計有一個客戶端類(即Device),並在每個單獨的進程或線程中創建一個對象。我知道使用fork()的命名管道共享內存,以及與其他線程通信的技術,但我擔心同步和潛在的穩定性問題。在我遇到這個問題之前,我對fork和它的易用性和簡單性感到興奮。穩定性是排名第一的關注點。

我這樣做完全錯了嗎?我的描述並不是很好,所以那些認爲你可能會提供幫助的人可能首先會提出問題。也許有人剛剛完成這樣的東西...


我對這個問題的長度和相當模糊的性質表示歉意。這更多的是設計問題,而不是直接的,可回答的問題。我不確定它是否屬於程序員或者是在這裏。如有必要,隨意移動。

謝謝大家誰試圖救我的理智。

更新:如果我爲此使用Boost.Asio,任何人都可以給我一個簡短的解釋/示例代碼或指向正確的方向嗎?

回答

1

你應該ahve看看的boost ::短耳,並在活動對象patterm。 在boost'Con 2010上有一個很棒的視頻/演講,你可以在blip.tvB上找到

+0

鏈接:http://boostcon.blip.tv/file/4171562/ – 2011-05-05 04:49:49

+0

謝謝!看起來很有希望。 – Smurf64 2011-05-05 20:40:05