房间类游戏后台框架(三) |
您所在的位置:网站首页 › 电脑游戏房间设计方案 › 房间类游戏后台框架(三) |
大厅服务器概述 大厅服务器负责玩家进入游戏的接入、发送公告等功能。当玩家登陆完毕、游戏结束后将会进入大厅服务器。 大厅服务器需求 公告对玩家进行匹配创建房间加入房间大厅服务器结构 大厅服务器流程 大厅服务器细节 由于使用了Redis当作全局内存,其实游戏大厅只是一个使用Redis进行业务操作的模块。在线匹配功能后期可以划分为匹配服务器,降低游戏大厅负载。 在创建房间过程中,大厅服务器对在线的游戏服务进行遍历,负载低的服务器优先创建房间。 由于使用了消息队列,因此并不能同步发送信息,因此写了组件专门处理使异步操作使其变为同步操作,代码如下: type BlockVisit struct { Message map[string]chan grpc_common.Message sync.RWMutex } func (block *BlockVisit) Get(name string) (chan grpc_common.Message, error) { block.RLock() defer block.RUnlock() message, exit := block.Message[name] if !exit { return nil, errors.New("error messageid") } return message, nil } func (block *BlockVisit) GrpcSend(client *Grpc_client, Message grpc_common.MessageRouter, timeout int) (grpc_common.Message, error) { // 设置信息为发送出去处理 Message.RouteMessage.DealMessage = true message := make(chan grpc_common.Message, 1) block.Lock() MessageId := block.NewId() block.Message[MessageId] = message Message.RouteMessage.MessageId = MessageId sendmessage, err := grpc_common.Encode(&Message) if err != nil { return grpc_common.Message{}, err } err = client.WriteMessage(sendmessage) if err != nil { delete(block.Message, MessageId) block.Unlock() return grpc_common.Message{}, err } block.Unlock() timer := time.NewTicker(time.Duration(timeout) * time.Second) select { case |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |