房间类游戏后台框架(三)

您所在的位置:网站首页 电脑游戏房间设计方案 房间类游戏后台框架(三)

房间类游戏后台框架(三)

2024-07-08 21:14| 来源: 网络整理| 查看: 265

  大厅服务器概述

  大厅服务器负责玩家进入游戏的接入、发送公告等功能。当玩家登陆完毕、游戏结束后将会进入大厅服务器。

  大厅服务器需求

公告对玩家进行匹配创建房间加入房间

  大厅服务器结构

  大厅服务器流程

    

    大厅服务器细节

    由于使用了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