2013-06-26 77 views
2

我正在編寫一個網絡應用程序,它從多個客戶端接收數據:當收到一個數據包時,應用程序讀取並修改頭,然後將數據包轉發給一個或多個客戶端。我想爲每個到客戶端的連接使用一個輸出隊列,因此應用程序能夠監視每個輸出隊列的填充級別並檢測每個客戶端的負載。網絡應用程序有多少個傳入緩衝區?

傳入數據包的路由可以通過單個線程來實現,該線程應該分析每個數據包的頭以確定目標客戶端:該線程還訪問路由表以正確轉發數據包。

如何處理傳入的消息? 我可以使用單個共享隊列或一個輸入隊列爲每一個連接:

  1. 如果我使用單個共享隊列,就可以同時由路由線程和由該處理與連接線程訪問客戶;
  2. 如果我爲每個輸入連接使用一個輸入隊列,它將由路由線程和處理來自客戶端的連接的唯一線程同時訪問。

在第一種情況下,路由線程的作用將會非常簡單,因爲它只應從隊列中取出下一個數據包並將其轉發給另一個客戶端。在第二種情況下,路由線程應該逐個檢查所有輸入隊列。第二種方法可以避免最快的連接可以填充共享隊列,從而增加其他連接可以找到隊列滿的可能性。

第二種方法將要求路由線程應遵循一個策略,以確保與輸入隊列相關的公平行爲。在這種情況下可以採用什麼政策?

此外,還有什麼其他原因可能導致人們選擇第一種或第二種解決方案?這兩種解決方案的優點和缺點是什麼?

回答

1

傳入數據包的路由可以由單個線程

爲什麼有一個線程都可以實現嗎?爲什麼不只是有一個方法,由接收線程調用,將結果消息放在目標客戶端的寫入隊列中?