我想實現一個TCP服務器,這是一個較大的項目的一部分。基本上,服務器應該能夠與任意數量的客戶端(至少32)保持TCP連接,併爲請求服務的任何客戶端提供服務。在我們的場景中,事情是假設一旦客戶端連接到服務器,它將永遠不會關閉連接,除非發生某種故障(例如,運行客戶端的機器故障),並且它會重複請求服務服務器。所有其他客戶端i-e也是如此,每個客戶端都將維護與服務器的連接並執行交易。因此總結一下,服務器將同時維護與客戶端的連接,同時根據需要爲每個客戶端提供服務,並且還應該能夠接受任何想要連接到服務器的其他客戶端連接。多線程服務器設計
現在我使用berkely套接字API的select()
系統調用實現了上述功能,並且當我們有少量客戶端(比如說10)時,它工作正常。但是,當我們在一臺16核心機器上實現它時,服務器需要儘可能地擴展到最高級別。爲此,我通過各種多線程設計技術來查看e-g每個客戶端的一個線程等,我認爲最好的一個線程池設計。現在我正要實現我遇到了一些問題: 如果我指定主線程接受任何數量的傳入連接並將每個連接文件描述符保存在數據結構中,並且我有一個線程池,那麼我將如何獲取線程來輪詢某個特定客戶是否請求服務。該設計足夠簡單,適用於客戶端與服務器聯繫的場景,並且在獲得服務後,它會關閉連接,以便我們可以從池中選擇一個線程,爲客戶端提供服務,然後將其推回池中以供將來連接處理。但是,當我們必須服務一組維護連接並間歇性請求服務的客戶端時,最好的方法是做什麼。所有的幫助將非常感謝,因爲我真的被困在這。 謝謝。
粘貼你的代碼,讓我們看看。 Apache有什麼問題? – YumYumYum 2012-01-29 21:04:37
我必須使用SOCKET API在系統無關的C語言中開發服務器。 – Abdullah 2012-01-29 21:07:56