[linux环境] 基于thrift模拟游戏的简易匹配机制(二)

第二天: 利用生产者消费者模型实现傻瓜版匹配机制(不按段位和匹配时间)


前文回顾: 

[linux环境] 基于thrift模拟游戏的简易匹配机制(一)_☆迷茫狗子的秘密基地☆-CSDN博客thrift官方文档Apache Thrift - Homehttps://thrift.apache.org/我的Git仓库文件 · master · Knight bit / thrift_lesson · GitLab (acwing.com)https://git.acwing.com/knight/thrift_lesson/-/tree/master注意:不会事无巨细,只是记录一下大致的流程,感悟目录第一天:实现匹配的客户端(game)和服务端(match..https://blog.csdn.net/qq_39391544/article/details/120585704

我的Git仓库

文件 · master · Knight bit / thrift_lesson · GitLab (acwing.com)icon-default.png?t=L892https://git.acwing.com/knight/thrift_lesson/-/tree/master

目录

第二天: 利用生产者消费者模型实现傻瓜版匹配机制(不按段位和匹配时间)

对客户端client.py 的操作进行完善

//生产者消费者队列

设计一下消费者进程

 设计一下生产者进程

设计一下匹配池(傻瓜版)

效果


上次客户端直接调用添加用户的函数,我们今天先增加一点可操作性,如输入 add / remove相关的操作模拟游戏的匹配/退出操作

对客户端client.py 的操作进行完善

以实现 输入相应的id和用户名, 自定义 添加/删除,

[linux环境] 基于thrift模拟游戏的简易匹配机制(二)_第1张图片

 

具体改动参见commit: finish match-client (258f260c) · 提交 · Knight bit / thrift_lesson · GitLab (acwing.com)icon-default.png?t=L892https://git.acwing.com/knight/thrift_lesson/-/commit/258f260cb77d9b24b97c72381d30dd7c538394bd

//生产者消费者队列

给匹配的服务端增加一个线程(使匹配段位相近,并控制好匹配时长)

需要为线程加锁,保证所有有关队列的操作同一时间只能有一个线程操作

//在任务队列为空时,  利用条件变量,在消费者队列卡住, 直到有新的任务进来唤醒该进程才会继续执行

message_queue.cv.notify_all();

//处理完共享的变量后千万记得解锁,否则进程阻塞效率会很低

设计一下消费者进程

[linux环境] 基于thrift模拟游戏的简易匹配机制(二)_第2张图片

 设计一下生产者进程

[linux环境] 基于thrift模拟游戏的简易匹配机制(二)_第3张图片

 

设计一下匹配池(傻瓜版)

[linux环境] 基于thrift模拟游戏的简易匹配机制(二)_第4张图片

 

具体改动参见commit: 

match-server version:2.0 (4a585f12) · 提交 · Knight bit / thrift_lesson · GitLab (acwing.com)icon-default.png?t=L892https://git.acwing.com/knight/thrift_lesson/-/commit/4a585f1249a63021bb6d79923ded7e7fbde30e35

因为用到了进程,编译完链接的时候记得加上 -pthread

g++ -c main.cpp
g++ *.o -o main -lthrift -pthread

效果

由此,我们实现了一个傻瓜版匹配机制!!(一旦匹配池出现两名玩家,就把他们匹配到一块)

[linux环境] 基于thrift模拟游戏的简易匹配机制(二)_第5张图片

 

你可能感兴趣的