2011-03-16 48 views
0

我正在開發客戶端應用程序,它是TCP客戶端的模擬器可能必須模擬1000客戶端。檢索信息最快的數據結構C++

每個客戶端狀態信息的大小可以是50個字節。狀態信息是服務器和客戶端模擬器需要存儲的地方所需要的。

服務器可以請求任何客戶端有關狀態信息。因此,對於這種情況我想知道哪些數據結構可能有用。

服務器已經實現。如何管理這些客戶端狀態信息。因爲我不能使用boost和其他第三方庫,我只能依賴C++。

關於如何將狀態信息管理:

  • 模擬客戶知道自己的狀態
  • 模擬服務器可以模擬客戶端請求的狀態。
  • 每個客戶都有固定的唯一數字。服務器知道這個號碼。當客戶端連接時,服務器將用這個數字映射套接字來識別客戶端。
  • 服務器每次輪詢任何客戶端的狀態時,都會輪詢所有客戶端的狀態。

在這種情況下可以使用哪種STL /或其他數據結構。 這裏沒有第三方的lib方允許。

請建議我哪一個是最佳使用

由於

+0

您的帖子至少應該放大幾倍,因爲我們只有20%的信息可以幫助您。 – fazo

+0

什麼是客戶(1000)?信息將如何被檢索?你需要以某種方式查看它,或者只是遍歷它?你沒有提供足夠的信息來回答你的問題。 – Omnifarious

+0

請更好地描述你的問題。 – murrekatt

回答

3

這取決於你需要做什麼。

如果它只是一個簡單的查找,然後使用stl :: map(在STL中,這通常實現爲一個樹,所以你有O(lg N)查找)。

如果只有1000個,並且您對標識符有一些控制權,爲什麼不使用數組?這將會(顯然)給你O(1)訪問給定鍵的任何元素。如果預先確定了一組標識符,則使用Perfect Hashing,並且還可以獲得O(1)查找。老實說,如果你只有1000個元素,那麼如果它不在代碼的時間關鍵部分,那麼幾乎任何東西都會很快地工作。

0

我會使用散列函數建議使用用戶定義<key, value>類型的對象的矢量,具有O(1)的訪問。

1

通常,最快的是O(1),這是恆定的時間查找。如何實現這一點,如果可能的話,受到你具體情況的限制。

從目前爲止的解釋中,我們不清楚你有什麼限制(服務器有),我們也不知道它有什麼信息或它如何操作。

開放式問題:

  • 誰知道狀態?
  • 誰知道客戶端和服務器的狀態?
  • 在想知道客戶的狀態之前,服務器「有權訪問」什麼?
  • 服務器是否每次都需要所有客戶端狀態?

當服務器需要知道客戶端的狀態舉幾個例子:

服務器具有指向客戶對象和狀態是在客戶端。

int status = client->getStatus(); 

服務器有客戶端的ID和狀態存儲在陣列。客戶ID從0-999。

int status = clientStatus[clientId]; 

以上兩者是O(1)。

如果你描述的更好,你會得到更好的答案。

+0

1客戶端知道自己的狀態2.第一個客戶端知道,然後服務器可以請求它從客戶端獲得它。 3.每個客戶端將有固定的唯一數字,並且服務器會知道這個數字。當客戶端連接上時,服務器將使用該數字映射該套接字以識別客戶端。是的+ –

+0

@Chris,請使用這些信息更新您的問題。 – murrekatt

+0

@Chris,是什麼觸發服務器想要知道狀態以及決定要查詢的客戶端子集的內容? (請使用此信息更新您的問題) – murrekatt