alberliu / gim

golang写的IM服务器(服务组件形式)
MIT License
2.57k stars 525 forks source link

请问为什么需要发送两份消息呢?谢谢。 #120

Closed yiippee closed 2 years ago

yiippee commented 2 years ago
// SendToFriend 消息发送至好友
func (*friendService) SendToFriend(ctx context.Context, sender *pb.Sender, req *pb.SendMessageReq) (int64, error) {
    // 发给发送者
    seq, err := proxy.MessageProxy.SendToUser(ctx, sender, sender.SenderId, req)
    if err != nil {
        return 0, err
    }

    // 发给接收者
    _, err = proxy.MessageProxy.SendToUser(ctx, sender, req.ReceiverId, req)
    if err != nil {
        return 0, err
    }

    return seq, nil
}

发送消息给好友时,为什么给接收者发送了一份,还要给发送者(就是自己)发送一份消息呢? 我理解的是,你使用的是写扩散的方式,每个用户都拥有与自己有关的收发的所有消息记录,聊天记录就很完整,那这样存储起来是不是很冗余?谢谢。

alberliu commented 2 years ago

这个是为了支持多设备,发送给自己的其他设备

yiippee commented 2 years ago

这个是为了支持多设备,发送给自己的其他设备

嗯嗯,是的。 发送给自己的其他设备的消息记录也要存储起来吗?感觉没有必要存储啊

alberliu commented 2 years ago

是需要存储的,因为其他设备也需要离线消息同步,比如,企业微信,PC登录之后,就会同步历史消息