在实际的软件开发项目中,经常会遇到某模块需要向其它模块发消息的情况。为了减轻消息接收者的负担,我们会采用一种叫做轮询的机制来发送消息。本文介绍轮询算法的流程及其代码框架。
1.算法流程
假设消息发送模块为模块A,消息接收模块为模块B。模块A安装了一个,模块B安装了N个。所有模块都同时启动。
算法流程如图1所示:
图1 轮询算法流程
2.代码框架
static int g_iSendIdx = 0;
for (iLoopFlag = 0; iLoopFlag < N; iLoopFlag ++) // N为模块B的安装个数
{
// 构造发往模块B的消息
// 将消息发到模块B
if (消息发送成功)
{
g_iSendIdx = (g_iSendIdx + 1) % N; // 记录下次发送到哪个模块B
break;
}
else // 消息发送失败
{
g_iSendIdx = (g_iSendIdx + 1) % N; // 记录下次发送到哪个模块B
}
}
if (iLoopFlag >= N)
{
// 发送失败, 不进行后续处理
}
// 继续处理下面的流程
对于轮询算法,大家需要注意的是:
(1) 该算法是为了解决消息接收者负荷过重的问题而提出的,如果消息量不大,可以直接采用一对一的模式。
(2) 对于消息发送成功的情况,一定要记录下次消息发送模块的标志。即如果当前向第一个模块B发消息成功,那么下次应该将消息发往第二个模块B。如此不断循环。
本人微信公众号:zhouzxi,请扫描以下二维码: