簡體   English   中英

Socket的dataInputStream知道如何處理多個寫入嗎?

[英]Is dataInputStream of a Socket know how to deal with multiple writings to it?

我通常在開發網絡游戲:

我有一台服務器,它為連接到它的每個客戶端啟動一個serverThread。
其目的是偵聽來自特定客戶端的消息,並在服務器上對其進行處理。
同樣,對於每個打開的客戶端,它也會啟動clientThread,這是偵聽服務器消息的線程。
這兩個線程是非常簡單且相似的線程,它們實現了Runnable接口,因此覆蓋了run方法。
每個Run方法都是某種無限循環,在其啟動時具有命令(阻塞命令):

int命令= m_In.readInt();

然后通過切換接收到的命令的案例結構進行處理。
處理完成后,循環導致代碼返回到阻塞的m_In.readInt()
等待另一個命令來。

我的問題是:我的Net游戲有足夠的選項正在通過此m_In使用通信,那么如果有兩個或更多消息幾乎幾乎一起發送到clientThread,會發生什么情況,dataInputStream將如何起作用?
它會開始處理第一條消息,完成后是否會抓取正在排隊的第二條消息? 否則它可能會掉落第二條消息而丟失? 也許該流具有緩沖區,因此它將第二條消息存儲在隊列中或其他內容中?

謝謝

流本質上期望數據按指定順序排列。 如果您有兩個線程同時寫入相同的流,則會發生不良情況。

現在,您當然可以同步對流的訪問,並使兩個線程交錯進行寫操作(只要您在流上構建某種格式來告訴接收方如何讀取數據),但是默認情況下不會這樣做。

但是,通常,每個客戶端線程將具有自己的連接,從而具有各自的寫入流。 服務器顯然可以在“相同時間”從多個流中讀取,這就是正常的服務器模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM