aceld / zinx

A lightweight concurrent server framework based on Golang.
https://github.com/aceld/zinx/wiki
MIT License
7.07k stars 1.21k forks source link

handle里的数据问题 #1

Closed fancygo closed 5 years ago

fancygo commented 5 years ago

每个handle里的数据都不一样,如果不是write一个简单的字符串,比如是另外的proto序列化的数据,怎么能做到统一处理而不用每个handle里都要把数据序列化一遍

aceld commented 5 years ago

如果有protobuf,或者 json这种上层数据协议需要承载,那么在zinx应用端完成解析就好了,handle里发送的序列化只是启动客户端和服务端传输标准。 如果需要发送protobuf,那么直接把protobuf放到data里就好了。

例如:

` //protobuf data := &pb.BroadCast{ Pid:p.Pid, Tp:2, Data:&pb.BroadCast_P{ &pb.Position{ X:p.X, Y:p.Y, Z:p.Z, V:p.V, }, }, }

for _, player := range players{ / 发送消息,使用zinx的SendMsg/ player.SendMsg(200, data) } `

` / handle 处理数据 / type Api2Router struct { fnet.BaseRouter }

func (*Api2Router)Handle(request iface.IRequest){ msg := &pb.BroadCast{} err := proto.Unmarshal(request.GetData(), msg) if err != nil{ logger.Error(err) request.GetConnection().Stop() return } // .... } `

fancygo commented 5 years ago

ok, 了解了