0
点赞
收藏
分享

微信扫一扫

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

舟海君 2022-11-28 阅读 104


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

我的Git仓库

​​文件 · master · Knight bit / thrift_lesson · GitLab (acwing.com)

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

https://git.acwing.com/knight/thrift_lesson/-/tree/master​​

目录

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

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

​​//生产者消费者队列​​

​​设计一下消费者进程​​

​​ 设计一下生产者进程​​

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

​​效果​​

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

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

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

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

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

 

具体改动参见commit: ​​finish match-client (258f260c) · 提交 · Knight bit / thrift_lesson · GitLab (acwing.com)

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

https://git.acwing.com/knight/thrift_lesson/-/commit/258f260cb77d9b24b97c72381d30dd7c538394bd​​

//生产者消费者队列

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

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

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

message_queue.cv.notify_all();

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

设计一下消费者进程

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

 设计一下生产者进程

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

 

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

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

 

具体改动参见commit: 

​​match-server version:2.0 (4a585f12) · 提交 · Knight bit / thrift_lesson · GitLab (acwing.com)

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

https://git.acwing.com/knight/thrift_lesson/-/commit/4a585f1249a63021bb6d79923ded7e7fbde30e35​​

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

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

效果

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

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

 

举报

相关推荐

0 条评论