[英]C++ TCP server Class Design
我正在使用C ++(win32 / linux)開發TCP服務器,該服務器可以滿足多個客戶端的需求。該服務器用於視頻流傳輸。客戶端向服務器請求視頻,服務器從與攝像機連接的網關獲取視頻。 我被設計班困住了,我發現三個班
因此,這里ConnectionMgr負責管理其他類。
我希望您對此有意見。
請提供您的反饋,以便我可以升級我的設計。
從頭開始看問題空間:
為了體會這個問題的空間,我建議您創建一個非常簡單的客戶端/服務器程序-如果您熟悉並熟悉多線程,則可以使用線程,否則可以通過GCC libc TCP客戶端/服務器示例進行選擇()的解決方案(http://www.gnu.org/s/libc/manual/html_node/Server-Example.html#Server-Example)或嘗試使用boost :: asio或ACE或其他方法。 首先,只要使其工作即可,您就可以遠程登錄到服務器,並且在任何連接中鍵入的內容都會在所有連接上回顯。 那應該給您足夠的洞察力,以便開始提出更具體的問題。
就像@nabulke和@Jan Hudec在評論中指出的那樣, Boost.Asio是解決您的問題的很好的解決方案。 看一看非常簡單的示例“異步TCP Echo服務器” 。 它僅使用2個類: server
和session
。 沒有session_manager
。 通過智能指針自動管理會話,這是非常方便和簡單的方法。
使用Boost.Asio,您可以使網絡部分保持簡單(並通過使用異步處理提高效率,幾乎達到最佳狀態)。 另外,添加幾行代碼后,您會收到多線程服務器,而沒有頭疼(我建議使用以下示例: “使用單個io_service和調用io_service :: run()的線程池的HTTP服務器。” ,只需忽略HTTP。東西。注意在connection
類中使用boost::asio::io_service::strand
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.