2013-04-22 20 views
0

我有一個標準的客戶端/服務器設置。是否有可能使用多個java ObjetOutputStream對象來寫入一個java ObjectInputStream對象?

我想構建的程序很像郵局(這是我的服務器)。多人(使用ObjectOutputStream的客戶端)將具有附加地址的辦公室(具有單個ObjectInputStream的服務器)郵件發送給辦公室,辦公室將郵件發送到應該去的地方。如果可能的話,我想在服務器中有一個ObjectInputStream阻止,等待「郵件」從任何 ObjectOutputStream進來,然後發送「郵件」到它應該去的地方。這樣我就可以擁有一個完全致力於接收數據併發送它的線程。

我將爲每個人的客戶端用他們的ObjectOutputStream創建一個線程,但希望不需要服務器中的匹配線程與每個人進行通信。我對這個想法很感興趣,因爲我發現構建大量的線程來單獨處理連接是很過分的,因爲在我的情況下,單個線程可能只發送一次數據。

這可行嗎?或者只是愚蠢?

回答

0

如果您在服務器應用程序中只有ObjectInputStream的一個實例,並且您有許多客戶端,那麼此實例需要由所有線程共享,因此您需要將訪問權限與其同步。您可以閱讀更多here。希望這可以幫助。

OR

你可以有ObjectInputStream實例池,並使用諸如輪循一個分配算法(doc),您可以返回同一個實例的每個x爲了線程例如...這將使在服務器應用程序中流動更加平行

0

你的問題沒有意義。您需要單獨一對ObjectInputStreamObjectOutputStreamSocket。您還需要需要一個ThreadSocket,除非您準備忍受通過InputStream.available()輪詢的清單限制,這不會阻止您的讀取被阻止。如果您使用的是對象序列化,則您已經承諾阻止I/O,並因此針對每個套接字的線程。

相關問題