我在網關上有一個網絡應用程序。它接收和發送數據包。對於其中的大多數,我的網關充當路由器,但在某些情況下,它也可以接收數據包。c linux多線程聯網
我應該有:
- 只有一個主線程
- 一個主線程+負責給它正確的流處理器
- 儘可能多的線程調度線程,因爲有流動
- 別的東西。
?
我在網關上有一個網絡應用程序。它接收和發送數據包。對於其中的大多數,我的網關充當路由器,但在某些情況下,它也可以接收數據包。c linux多線程聯網
我應該有:
?
我不知道很多關於物聯網應用,但我認爲是這樣的:
您的情況聽起來很像典型的Unix服務守護進程。解決問題的流行方法不是使用線程,而是使用分支。
這個想法是你的程序在套接字上偵聽並等待連接。一旦連接到達,它就會分叉。子進程然後繼續處理連接。父進程本身只是在循環中繼續並等待傳入連接。
優勢在穿線:
缺點:
件你可以找到許多代碼示例在線。
我的個人偏好是每個連接使用一個主線程和一個工作線程。沒有任何帽子。我假設你的服務器像HTTP服務器一樣是無狀態的。
對於有狀態的服務器,你將不得不找出一些方法來控制線程數量。
如果你不想學習Unix網絡編程(如果它不是你的意圖並編寫自己的代碼),你可以使用一些庫的幫助。看看ENet(http://enet.bespin.org/)。您可以在這裏閱讀更多關於它的信息:http://www.linuxjournal.com/content/network-programming-enet(來自文本:這意味着您不必擔心分叉,預編譯,線程或非阻塞調用的複雜性連接()和接受()以處理多個連接。) –