当前位置:编程学习 > C/C++ >>

服务器程序中如何设计retry功能

集群中有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.zzzyk.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。
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,