kingston-csj / jforgame

jforgame是一个一站式游戏服务器开发框架。包含游戏服务器开发所需要的各种组件,比如网关,socket服务端与客户端,自定义高效消息编解码,游戏热更新,游戏通用工具等等。包含游戏服,跨服,匹配服,后台管理系统等实现,同时提供大量业务案例以供学习。亦可用于其他socket应用,例如及时聊天等。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

匹配模块的逻辑是否可以分享下?

jptiancai opened this issue · comments

看了下匹配模块的代码,看到声明了积分和战力字段,后续的操作没有详细给出,说下我的粗略方案,会放入redis匹配池中,按照战力或者积分排序,取相邻的两个放入匹配结果中,如果匹配池中只有一个人的情况就需要给机器人,这一块的逻辑如果换做是你,是怎么考虑的呢?谢谢分享

commented

如果按我的想法,我不会用redis实现匹配。游戏服务器把匹配请求统一发到匹配服,匹配服缓存一个匹配队列。匹配服定时器定时消费该队列,对请求进行排序分配房间,然后放到另外一个数据缓存。同时,游戏服务器也需要定时轮询,向匹配服拿结果。这里由游戏服主动发起查询请求,因为匹配服采用http后,链接是单向的,无法主动推送数据。

@kingston-csj 谢谢回复,明白你的思路,如果你的思路用到多台服务器(都运行一样的程序)上就不适用了,会出现不一致的情况,我用redis是为了解决多台服务器数据互通的问题。

commented

不会出现不一致的情况的。以前我们的项目都是几千组服务器,然后只有一个匹配服。每个匹配请求都会有一个serverId作为参数,完全可以控制要不要跨服务器匹配。

嗯嗯,如果是上千组服务器的话,只有一个匹配服来处理,在性能上可能会有不足,这样的话就得拓展匹配服了,这一点是如何解决呢? 我的想法是需要分组了, 比如每组连接一个匹配服,但是这样一来就无法兼容一些全球同服的游戏了。

commented

两年过去了。。。请教一下,如果单独出一个匹配服,匹配完成后,如果通知到每个客户端的socket呢

commented

如果匹配服基于http实现,那么只能游戏服定时查询结果。如果基于socket实现,可以主动推送给游戏服。