之前我们实现了朴素匹配算法,拿出队头的两个人做匹配。现在我们完善匹配逻辑。最简单的完善方法是安装战斗力匹配。我们按照战斗力匹配,每隔一秒钟将战斗力最弱的两个人匹配到一起。
但是这样有一个问题,如果两个人战斗力相差很大,那么两个人永远都不会匹配到一起,因此我们记录一个每个人的等待时间,战斗力会随着等待时间的变化。
消费者线程函数变为
void consume_task()
{
while (true)
{
unique_lock<mutex> lck(message_queue.m);
if (message_queue.q.empty())
{
// message_queue.cv.wait(lck);
lck.unlock();
pool.match();
sleep(1);
}
else
{
auto task = message_queue.q.front();
message_queue.q.pop();
lck.unlock();
if (task.type == "add") pool.add(task.user);
else if (task.type == "remove") pool.remove(task.user);
}
}
}
接下来我们要把sava_data换成另一个远程服务的客户端接口,这里直接从官网复制一段客户端代码到main函数里。
最后可以将服务端的单线程处理,改成多线程。参照官方文档。