内容简介:大家好,我是彬哥,本节给大家讲下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分组安全策略匹配
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
风口上的汽车新商业
郭桂山 / 人民邮电出版社 / 59
本书从互联网+汽车趋势解析、汽车电商困局突围策略、汽车后市场溃败求解等三个篇章详细阐述了作者的观察与思考,当然更多的还是作者在汽车电商行业的实践中得出的解决诸多问题的战略策略,作者站在行业之巅既有战略策略的解决方案,同时也有战术上的实施细则,更有实操案例解析与行业大咖访谈等不可多得的干货。当然,作者一向追崇的宗旨是,书中观点的对错不是最重要的,重在与行业同仁探讨,以书会友,希望作者的这块破砖头,能......一起来看看 《风口上的汽车新商业》 这本书的介绍吧!