内容简介:大家好,我是彬哥,本节给大家讲下LollipopGov1.0.20190114版本游戏服务器1v1匹配功能优化,抛砖引玉了,主要是针对Go语言游戏服务器匹配功能优化功能处理。每天坚持学习1小时Go语言,大家加油,我是彬哥,下期见!如果文章中不同观点、意见请文章下留言或者关注下方订阅号反馈!
大家好,我是彬哥,本节给大家讲下LollipopGov1.0.20190114版本游戏服务器1v1匹配功能优化,抛砖引玉了,主要是针对 Go 语言游戏服务器匹配功能优化功能处理。
匹配示意图
package match import ( "LollipopGo/LollipopGo/player" "LollipopGo/LollipopGo/util" "cache2go" "fmt" "time" ) //------------------------------------------------------------------------------ var ( Match_Chan chan *player.PlayerSt MatchData_Chan chan map[string]interface{} Imax int = 0 ChanMax int = 1000 MatchSpeed = time.Millisecond * 500 PlaterMatchSpeed = time.Second * 1 // MatchData map[string]*RoomMatch MatchData map[string]interface{} QuitMatchData map[string]string cache *cache2go.CacheTable MatchRoomUID int = 1000 ) type RoomMatchbak struct { RoomUID string // 房间号 DataPlayer *player.PlayerSt // 房间的时间限制 } //------------------------------------------------------------------------------ type RoomMatch struct { RoomUID string // 房间号 PlayerAOpenID string // A 阵营的OpenID PlayerBOpenID string // B 阵营的OpenID RoomLimTime uint64 // 房间的时间限制 RoomPlayerMap map[string]*player.PlayerSt // 房间玩家的结构信息 } //------------------------------------------------------------------------------ func init() { Match_Chan = make(chan *player.PlayerSt, ChanMax) // MatchData_Chan = make(chan map[string]*RoomMatch, ChanMax) MatchData_Chan = make(chan map[string]interface{}, ChanMax) QuitMatchData = make(map[string]string) cache = cache2go.Cache("myCache") go Sort_timer() } func Putdata(data *player.PlayerSt) { fmt.Println("加入匹配队列") Match_Chan <- data return } func GetChanLength() int { Imax = len(Match_Chan) return Imax } func DoingMatch() { Imax = len(Match_Chan) if Imax == 1 { fmt.Println(Match_Chan, "等待匹配") return } roomid := "" icround := Imax / 2 MatchData = make(map[string]interface{}) datamatch := new(RoomMatch) datamatch.RoomPlayerMap = make(map[string]*player.PlayerSt) for i := 1; i < icround*2+1; i++ { if data, ok := <-Match_Chan; ok { fmt.Println("3333333333333333333333", data) // if GetMatchPlayer(data.OpenID) { // fmt.Println(data.OpenID, "玩家已经退出!") // continue // } datamatch.RoomLimTime = 10 roomid = util.Int2str_LollipopGo(MatchRoomUID) datamatch.RoomUID = roomid datamatch.RoomPlayerMap[data.OpenID] = data } if i%2 == 0 { //datamatch.PlayerBOpenID = data.OpenID MatchData[roomid] = datamatch MatchData_Chan <- MatchData fmt.Println("0------------", MatchData_Chan) MatchRoomUID++ } } } func Sort_timer() { for { select { case <-time.After(MatchSpeed): { DoingMatch() } } } } func SetQuitMatch(OpenID string) { cache.Add(OpenID+"QuitMatch", 0, "exit") } func DelQuitMatchList(OpenID string) { cache.Delete(OpenID + "QuitMatch") } func GetMatchPlayer(OpenID string) bool { ok := false _, err1 := cache.Value(OpenID + "QuitMatch") if err1 == nil { ok = true } return ok } func GetMatchQueue(OpenID string) bool { ok := false _, err1 := cache.Value(OpenID + "MatchQueue") if err1 == nil { ok = true } return ok } func SetMatchQueue(OpenID string) { cache.Add(OpenID+"MatchQueue", 0, "exit") DelQuitMatchList(OpenID) } func DelMatchQueue(OpenID string) { cache.Delete(OpenID + "MatchQueue") }
每天坚持学习1小时Go语言,大家加油,我是彬哥,下期见!如果文章中不同观点、意见请文章下留言或者关注下方订阅号反馈!
社区交流群:221273219
Golang语言社区论坛 :
LollipopGo游戏服务器地址:
https://github.com/Golangltd/LollipopGo
社区视频课程课件GIT地址:
https://github.com/Golangltd/codeclassGolang语言社区
以上所述就是小编给大家介绍的《LollipopGo开源游戏服务器框架--匹配优化》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 开源|qa_match:一款基于深度学习的层级问答匹配工具
- 千亿级照片,毫秒间匹配最佳结果,微软开源 Bing 搜索背后的关键算法!
- 给我一首歌的时间,带你深入理解正则表达式的贪婪匹配和懒惰匹配
- Leetcode 题目:括号匹配
- Nginx 请求匹配规则
- WAF分组安全策略匹配
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
产品经理必懂的技术那点事儿:成为全栈产品经理
唐韧 / 电子工业出版社 / 2018-1 / 59
《产品经理必懂的技术那点事儿:成为全栈产品经理》以非技术背景产品经理学习技术为主题,将技术知识以简单并且易于理解的方式讲述出来,帮助非技术背景产品经理了解技术、学习技术,旨在帮助产品经理高效地与技术人员进行沟通与合作,避免不懂技术带来的困扰。 《产品经理必懂的技术那点事儿:成为全栈产品经理》主要内容围绕产品经理需要了解的互联网基础技术知识展开,涉及客户端、服务器端、数据库及一些数据处理知识。......一起来看看 《产品经理必懂的技术那点事儿:成为全栈产品经理》 这本书的介绍吧!