好的,我知道這很寬泛,但讓我縮小一點。我已經完成了一些客戶端 - 服務器編程,但是一次只能處理幾個客戶端。所以我在設計方面想知道這些服務器最主流的方法是什麼。如果人們可以參考教程,書籍或電子書。 哈哈好的。並沒有真正縮小它的範圍。我想我要找的是服務器端程序如何設置的一個簡單但實際的例子。 我看到它的方式:客戶端發送命令:服務器接收命令並放入隊列中,服務器有一個專用線程或一個不斷輪詢該隊列的線程池,然後將適當的響應發送回客戶端。是否經常使用非阻塞I/O? 我想只是教程,時間和練習是我真正需要的。什麼是設計大型服務器程序最常用的方法?
*編輯:謝謝你的迴應!這裏有一點我想要做的,我想。 這主要是爲了學習的目的,所以我寧願儘量避免使用框架或庫。舉個例子,這有點彌補的想法: 有一個客戶端程序,它執行一些功能,並不斷將輸出流傳輸到服務器(可以有很多這些客戶端),服務器然後創建統計信息並存儲大部分數據。並且假設有一個可以登錄到服務器的管理客戶端,並且如果有客戶端正在將數據流式傳輸到服務器,則它會將該數據傳輸到每個連接的管理客戶端。 這是我的設想服務器程序邏輯: 服務器將具有3個線程,用於管理傳入連接(每個端口一個監聽),則產生線程管理每個連接: 1)ClientConnection這將基本上只是接收輸出,我們只能說是文本 2)AdminConnection這將是服務器和管理客戶機之間發送命令 3)AdminDataConnection這將主要是用於客戶端的輸出流來管理客戶端
當數據從客戶端進來到服務器,服務器解析什麼是相關的,並將這些數據放入隊列中讓我們說adminDataQueue。反過來,有一個線程監視這個隊列,每隔200ms(或其他)檢查隊列,看看是否有數據,如果有的話,然後遍歷AdminDataConnections並將其發送給每個隊列。現在
的AdminConnection,這將是任何命令或數據的直接請求。因此,您可以請求統計數據,服務器端將接收統計數據的命令,然後發送一條說明傳入統計數據的命令,然後立即發送統計數據或統計數據。
至於AdminDataConnection,它僅僅是從客戶端的輸出交織在一起,也許一些簡單的命令。
從所有的客戶端數據的邏輯問題的帶寬問題除了被漏斗一起給每個管理員客戶端。會從這樣的設計出現什麼樣的問題,是由於縮放問題(再次忽略客戶端和服務器之間的帶寬;管理客戶端和服務器
你能寫出一個用戶故事,以更好地縮小它。這聽起來像你不是在談論一個Web應用程序,而是你自己在寫服務器的地方。 – 2009-09-28 17:41:57
就像電鋸沒有必要比鋼鋸更好?你是否知道數據的性質(更像是銀行交易,你可能會丟失數據,或者更像是你不太在意的遊戲交易),吞吐率,響應時間等。 也許,最好的細節是給我們你簡短的具體用例。 – 2009-09-28 18:02:44
我可以把你指向我的書,但那將是一個完全無恥的插件。 – mtnygard 2009-09-28 22:07:40