• Gonet2 游戏server框架解析之Agent(3)


    客户端消息在Agent中的预处理流程。
    这里写图片描写叙述

    Agent定义好的三种请求:

    //api.go
    var RCode = map[int16]string{
        0:  "heart_beat_req",         // 心跳包..
        1:  "heart_beat_ack",         // 心跳包回复
        10: "user_login_req",         // 登陆
        11: "user_login_succeed_ack", // 登陆成功
        12: "user_login_faild_ack",   // 登陆失败
        13: "client_error_ack",       // 客户端错误
        30: "get_seed_req",           // socket通信加密使用
        31: "get_seed_ack",           // socket通信加密使用
    }

    上面这段是 api.go中截取的。定义了协议号和相应消息的名称。


    以req结尾的是请求,ack结尾的是回复。

    //api.go
    var Handlers map[int16]func(*Session, *packet.Packet) []byte
    
    func init() {
        Handlers = map[int16]func(*Session, *packet.Packet) []byte{
            0:  P_heart_beat_req,
            10: P_user_login_req,
            30: P_get_seed_req,
        }
    }

    还是在api.go中,定义了与请求相应的处理方法,这些方法记录在Handlers中。方法的定义在文件client_handler/handle.go中。

    在协议号大于1000的还有一个分支,消息被封装成了一个Game_Frame,之后转发到了Gameserver,这个对象是由grpc框架生成的。服务的接口以及数据格式定义例如以下:

    syntax = "proto3";
    
    package proto;
    
    // game definition
    service GameService {
        rpc Stream(stream Game.Frame) returns (stream Game.Frame);  // 透传消息, 双向流
    }
    
    message Game {
        enum FrameType {
            Message = 0;
            Register = 1;
            Unregister = 2;
            Kick = 3;
            Ping = 4;   // for testing
        }
        message Frame {
            FrameType Type=1;
            bytes Message=2;
            int32 UserId = 3;
        }
    }

    在Gameserver中,有这样一个介绍。

    游戏server对外仅仅提供一个接口, 即:
    rpc Stream(stream Game.Frame) returns (stream Game.Frame);

    所以,接下来。就要到Gameserver的分析了。

  • 相关阅读:
    python hashlib模块
    OS模块-提供对操作系统进行调用的接口
    For循环
    python --time()函数
    使用docker部署prometheus和grafana 并监控mysql 配置告警
    记换换回收一个js逆向分析
    mitmproxy 在windows上的使用
    elasticsearch_dsl 的nested
    利用谷歌插件破解今日头条的新闻ajax参数加密,新手都能懂
    aiohttp爬虫的模板,类的形式
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7039371.html
Copyright © 2020-2023  润新知