我有一個處理來自多個客戶端的登錄的java服務器。服務器爲每個tcp/ip套接字偵聽器創建一個線程。數據庫訪問由服務器創建的另一個線程處理。在java中實現異步消息隊列
目前,我已經連接到服務器的客戶端數量很低(< 100),所以我沒有真正的性能問題,但我正在研究如何在未來處理更多的客戶端。我擔心的是,有很多客戶端,我的服務器和數據庫線程會因客戶端線程對其方法的不斷調用而陷入困境。
具體來說就數據庫而言:目前每個客戶端線程都訪問其服務器父級上的公共數據庫線程並執行數據訪問方法。我認爲我應該做的是擁有某種客戶端線程可以將其數據請求放入其中的消息隊列,並且數據庫線程在接收到數據時將執行該消息隊列。如果有數據要從數據訪問調用中返回,那麼它可以將它放在隊列中供客戶端線程使用。所有這些都不會觸及主服務器代碼或任何其他客戶端線程。
因此,我認爲我想實現一個異步消息隊列,客戶端線程可以將消息放在上面,並且數據庫線程將從中取出。這是正確的方法嗎?任何想法和鏈接到我可以閱讀有關實施的地方,將不勝感激。
不是一個答案,因此評論...你可能會想要Google上的「Java C10K問題」。基本上每個TCP/IP連接一個線程不會因爲您懷疑而削減它。你寫的問題不一定是*「constant calls」*,但是一旦客戶端數量變高(如果每個客戶端使用一個線程),就會在巨大數量的線程之間不停地交換數據。 – SyntaxT3rr0r 2010-12-02 14:43:16