2013-10-18 291 views
0

我正在編寫基於服務器的客戶端聊天。服務器是中央組件,可處理所有傳入消息和傳出消息。客戶是聊天用戶。他們在框架中看到聊天,並且還可以編寫聊天消息。這些消息被髮送到服務器。服務器依次更新所有客戶端。同步:客戶端,服務器聊天

我的問題是客戶端的同步。由於服務器是多線程的,所以這兩個消息都可以從客戶端接收,並且更新(以消息的形式)也必須發送出去。由於每個客戶端都在自己的線程中更新,因此不保證所有客戶端都會收到相同的消息。我們有一個同步問題。

我該如何解決?

我搞砸了時間戳和緩衝區。但這不是一個好的解決方案,因爲不能保證在分配時間戳之後,消息將立即放入緩衝區。

我會補充一點,我不知道客戶。也就是說,我在服務器上的每個線程中只有一個打開的連接。我沒有一組客戶或類似的東西來跟蹤所有的客戶。

回答

0

我建議你爲每個客戶端代理(這是管理與每個客戶端的通信的對象)實施一個隊列。 服務器對象的每次迭代(在其自己的線程上)工作: 1.它首先從所有客戶端代理的隊列中讀取消息 2.決定是否需要根據其內部邏輯和傳入消息發送任何消息 3.準備併發送任何傳出消息到其所有客戶端代理的隊列中。

客戶端代理線程工作計劃是這樣的: 1.從通信中讀取。 2.從客戶端代理寫入隊列到服務器(如果收到任何消息)。 3.從服務器到客戶端代理的隊列中讀取數據。 4.寫入通信通道到客戶端(如果需要)。

您可能必須在每個隊列上有一個互斥鎖。 希望可以幫到