客户端消息在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的分析了。

Gonet2 游戏server框架解析之Agent(3)的更多相关文章

  1. Gonet2 游戏server框架解析之gRPC提高(5)

    上一篇blog是关于gRPC框架的基本使用,假设说gRPC仅仅是远程发几个參数,那和一个普通的http请求也没多大区别了. 所以今天我就来学习一下gRPC高级一点的用法. 流! 流能够依据用法,分为单 ...

  2. Leaf - 一个由 Go 语言编写的开发效率和执行效率并重的开源游戏服务器框架

    转自:https://toutiao.io/posts/0l7l7n/preview Leaf 游戏服务器框架简介 Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏 ...

  3. Poco::TCPServer框架解析

    Poco::TCPServer框架解析 POCO C++ Libraries提供一套 C++ 的类库用以开发基于网络的可移植的应用程序,功能涉及线程.文件.流,网络协议包括:HTTP.FTP.SMTP ...

  4. Scut游戏server引擎Unity3d访问

    Scut提供Unity3d Sdk包.便利的高速发展和Scut游戏server对接: 看Unity3d示为以下的比率: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Asse ...

  5. 游戏UI框架设计(五): 配置管理与应用

    游戏UI框架设计(五) --配置管理与应用 在开发企业级游戏/VR/AR产品时候,我们总是希望可以总结出一些通用的技术体系,框架结构等,为简化我们的开发起到"四两拨千金"的作用.所 ...

  6. Serpent.AI – 游戏代理框架(Python)

    Serpent.AI - 游戏代理框架(Python) Serpent.AI是一个简单而强大的新颖框架,可帮助开发人员创建游戏代理.将您拥有的任何视频游戏变成一个成熟的实验的沙箱环境,所有这些都是熟悉 ...

  7. Pomelo分布式游戏服务器框架

    Pomelo介绍&入门 目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json ...

  8. 游戏服务器框架:Leaf/go

    Leaf 是一个使用 Go 语言开发的开源游戏服务器框架,注重运行效率并追求极致的开发效率.Leaf 适用于几乎所有的游戏类型.其主要的特性: 良好的使用体验.Leaf 总是尽可能的提供简洁和易用的接 ...

  9. [叁]Pomelo游戏server编程分享 之 server结构与配置分析

    网络部署结构 我们先看一下Pomeloserver网络部署情况,直接上图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3RiaW56aQ==/font/ ...

随机推荐

  1. 【RQNOJ】460 诺诺的队列

    [题目大意] 求全部数对(i,j)满足随意a[k]<=a[i]且a[k]<=a[j]. 形象地说,就是有一群人站成一列.每一个人有一定的身高,然后问有多少对人能够互相看得到. 把数对(i, ...

  2. hdu5371Hotaru&#39;s problem manacher算法

    //给一个序列.让求其最大子序列 //这个序列由三段组成.第一段和第二段对称,第一段和第三段一样 //manacher算法求得p[i] //枚举第二段的起点和长度,得到结果 #include<c ...

  3. nodejs02

    Node.js没有根目录的概念,因为它根本没有任何的web容器! 让node.js提供一个静态服务,都非常难! 也就是说,node.js中,如果看见一个网址是 1127.0.0.1:3000/fang ...

  4. BZOJ 4269 高斯消元求线性基

    思路: 最大: 所有线性基异或一下 次大: 最大的异或一下最小的线性基 搞定~ //By SiriusRen #include <cstdio> #include <algorith ...

  5. python3.x学习笔记2(基础知识)

    1.元组元组其实跟列表差不多,也是存一组数,只是它一旦创建,便不能在修改,所以又叫只读列表语法:names =('shgd','sjdh') 它只有两个方法,一个是count,一个是index 2.字 ...

  6. 日志文件支持unicode字符的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 开发的程序兼容多字节字符集和unicode字符集,最近发现一个问题,在unicode字符集下输出的日志文件是乱码的.显 ...

  7. 存储过程的调用和Parameters数组的调用

    记录一些杂记吧 declare @d datetime set @d=GETDATE() select * from [ACC_B2B].[dbo].ORDER_Head --where 1=1 se ...

  8. T_SQL 字符串函数

    字符串函数用于处理列中的数据值,通常属于字符型的数据类型. 1.ASCLL(character),将具体字符转换为相应的整数(ASCII)代码,结果为正数. 例:select  ASCII('A'), ...

  9. kolla-ansible 安装openstack 拉取阿里云镜像时报错

     TASK [mariadb : Pulling mariadb image] ************************************************************ ...

  10. 苹果下一代iPhone曝光

    3月23日消息,据9TO5Mac报道,苹果下一代iPhone(以下暂命名为iPhone 11)可能会提供像三星Galaxy S10的PowerShare功能,能为Apple Watch和AirPods ...