有个 gate 网关,包装一层 grpc 调用 logic 上的接口,协议使用的 protobuf 。大致业务流程都差不多: 1.反序列化成对象 2.调用 grpc 接口 3.根据结果,发送到客户端。
具体代码如下:
// 创建群
func (tcp *TcpConn) onHandleCreateGroup(header *cim.ImHeader, buff []byte) {
req := &cim.CIMGroupCreateReq{}
err := proto.Unmarshal(buff, req)
if err != nil {
logger.Sugar.Warnf("onHandleCreateGroup error")
return
}
logger.Sugar.Info("onHandleCreateGroup")
conn := GetMessageConn()
ctx, cancelFun := context.WithTimeout(context.Background(), time.Second*3)
defer cancelFun()
rsp, err := conn.CreateGroup(ctx, req)
if err != nil {
logger.Sugar.Warnf("CreateGroup(gRPC) err:", err.Error())
} else {
_, err = tcp.Send(header.SeqNum, uint16(GROUP_CREATE_DEFAULT_REQ), rsp)
logger.Sugar.Infof("onHandleCreateGroup CreateGroup(gRPC) res")
}
}
// 解散群
func (tcp *TcpConn) onHandleDisbandingGroup(header *cim.ImHeader, buff []byte) {
req := &cim.CIMGroupDisbandingReq{}
err := proto.Unmarshal(buff, req)
if err != nil {
logger.Sugar.Warnf("onHandleDisbandingGroup error")
return
}
logger.Sugar.Info("onHandleDisbandingGroup")
conn := GetMessageConn()
ctx, cancelFun := context.WithTimeout(context.Background(), time.Second*3)
defer cancelFun()
rsp, err := conn.DisbandingGroup(ctx, req)
if err != nil {
logger.Sugar.Warnf("DisbandingGroup(gRPC) err:")
} else {
_, err = tcp.Send(header.SeqNum, uint16(GROUP_DISBINGDING_RSP), rsp)
logger.Sugar.Infof("onHandleDisbandingGroup res")
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.