我有一個簡單的客戶端服務器應用程序使用套接字進行通信。一種可能性是每次客戶端向服務器發送一些東西時關閉套接字。保持java套接字打開 - 如何檢查新數據是否可用?
但我的想法是保持連接始終打開,即如果客戶端聯繫服務器,應將連接放入隊列(例如LinkedBlockingQueue)並保持打開狀態,這會提高性能。
如何在服務器中檢查隊列中是否有可用的新數據?我能想象的唯一事情就是不斷迭代整個隊列,並檢查每個套接字是否有新數據。但是這會非常低效,因爲如果我有幾個線程在隊列上工作,當一個線程掃描隊列時隊列就會被阻塞。
或者是否有可能在套接字上註冊回調函數,以便套接字通知線程數據已準備好?
套接字的InputStreams有幾個讀取方法,可以阻止當前線程,直到有可用的東西。你通常需要做套接字網絡多線程。這意味着每個客戶端都有一個接收線程,將數據存儲在主線程需要時可以檢索到的地方。 (評論,因爲不知道這是否是這個問題) – Felk 2014-10-03 23:16:55