We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
package msg
import ( "github.com/name5566/leaf/network/protobuf" pp "server/protobuf" )
var Processor = protobuf.NewProcessor()
func init() { Processor.Register(&pp.Action{}) Processor.Register(&pp.Hello{}) } 这是注册, 发消息也是按照文档上发送的 hello := protobuf.Hello{Info: "hello"} hello := protobuf.Hello{Info: "hello"} data, err := proto.Marshal(&hello) if err != nil { log.Fatal(err) } // len + data m := make([]byte, 2+len(data)) // 默认使用大端序 binary.BigEndian.PutUint16(m, uint16(len(data))) copy(m[2:], data) // 发送消息 conn.Write(m)
The text was updated successfully, but these errors were encountered:
protobuf 的协议头不一样,需要增加两个字节的MSG_ID,上行下行协议一致 len+msgId+pbdata,其中len=2+len(pbdata) 这里面服务器的消息注册有点问题,MSG_ID是与服务器端注册函数(p *Processor) Register(msg proto.Message)的调用次序有关的 `func (p *Processor) Register(msg proto.Message) uint16 { msgType := reflect.TypeOf(msg) if msgType == nil || msgType.Kind() != reflect.Ptr { log.Fatal("protobuf message pointer required") } if _, ok := p.msgID[msgType]; ok { log.Fatal("message %s is already registered", msgType) } if len(p.msgInfo) >= math.MaxUint16 { log.Fatal("too many protobuf messages (max = %v)", math.MaxUint16) }
i := new(MsgInfo) i.msgType = msgType p.msgInfo = append(p.msgInfo, i) id := uint16(len(p.msgInfo) - 1) p.msgID[msgType] = id return id
} ` 那么问题来了,当服务器端有很多协议需要注册,并且分布在各个模块的源文件的时候,客户端怎么才能知道proto message所对应的正确的MSG_ID?
Sorry, something went wrong.
No branches or pull requests
package msg
import (
"github.com/name5566/leaf/network/protobuf"
pp "server/protobuf"
)
var Processor = protobuf.NewProcessor()
func init() {
Processor.Register(&pp.Action{})
Processor.Register(&pp.Hello{})
}
这是注册, 发消息也是按照文档上发送的
hello := protobuf.Hello{Info: "hello"}
hello := protobuf.Hello{Info: "hello"}
data, err := proto.Marshal(&hello)
if err != nil {
log.Fatal(err)
}
// len + data
m := make([]byte, 2+len(data))
// 默认使用大端序
binary.BigEndian.PutUint16(m, uint16(len(data)))
copy(m[2:], data)
// 发送消息
conn.Write(m)
The text was updated successfully, but these errors were encountered: