没啥,这些 pb 的文档都是有的,go 的性能不错,不过我们都是用 python & c++,高性能的部分,还是交给 c++ 去做好一点
解析协议不需要额外去解析吧,这样维护起来没完没了,可以用 pb 自己的反射方法:
msgType, err := protoregistry.GlobalTypes.FindMessageByName("msgName")
if err != nil{
msg = msgType.New().InterFace()
}
嵌套也不需要多次反序列化,protojson.Marshal(msg) 既可以转成 json 去处理
之前做的时候是 hook 地址出来,然后去操作,好处是随时可以录制。发送。解析的部分用 cpp,不会像 python 一样存在吃性能的瓶颈
小孩子才做选择,全都要。我一般 c++ 写逻辑,python 调用
二维码过期了
c++ 实现的,传 buffer 不对,宕机很正常
std::string newBuffer((char*) buffer, bufferSize);
pb.ParseFromString(newBuffer):
宕机 gdb 查很久
建议了解一下 socket、epoll、protobuf,一步一步去做
这种是纯粹客户端了吧,用数量堆上去。服务器一般模拟客户端都是压测,只有接收、处理协议,不会有 gui 的
现在一般都是 protbuf+ 压缩 + 加密,比较少那种纯粹自己定义的了。
处理完协议、登录、就差不多了,做这个东西确实麻烦,不改确实能跑出很多问题,内存泄漏,redis、mysql 储存过长这些
会有格式的,前面的 int 是 string 长度,比如说是 int 是 2,后面就是跟着 2 个 str
case 这一块用反射去做好一点吧,getattr(object, case)(args)
没那么复杂,我负责的项目,配置表基本都是初始化的参数,检查类型、数值就可以了
别去
路径不对
python&c++
最近在做一个 hook 工具,拿网卡里面的数据,hook 对应进程的 socket,实现发送,这样好处是代码量不会特别大。解析协议就够了。
不会,不是全局的,写的时候就有做预留,每个实例不共享。反射速度依然是可以接受的。
之前项目做过一款协议工具,实现思路是拦截客户端的包,根据文档去解析协议,修改协议值去做协议测试。后面有根据这个协议工具做了协议收发器,自动反射,做了一个压测工具。