程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 服務器程序中如何設計retry功能

服務器程序中如何設計retry功能

編輯:C++入門知識

集群中有client、server1, server2三台機器,client需要向server請求數據,如果server1響應超時,則請求server2。server1、server2互為備份,包含同樣的數據。 client: [cpp]   for (id = 0; id < 2; id++)   {        if (TIMEOUT == do_request(server[id], timeout, req) )        {               continue; // retry next server        }   }     timeout是外部傳給client的總超時數。上面的代碼有一個問題:當網絡阻塞或者server十分繁忙的時候,do_request會超時,一旦超時,則總超時時間都被耗盡,根本沒有剩余時間去重試下一個server。 因此,正確的retry設計需要考慮到“網絡阻塞或者server十分繁忙”的情況,分給每個server的timeout時間只能是總timeout的一部分,代碼改寫如下:www.2cto.com [cpp]   for (id = 0; id < 2; id++)   {        if (TIMEOUT == do_request(server[id], timeout * get_timeout_percent(), req) )        {               continue; // retry next server        }   }     不過,對於server掛掉的情況(socket層面無法連接)do_request請求這個server會立即失敗,可以不設置timeout_percent。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved