请选择 进入手机版 | 继续访问电脑版

默认
发表评论 6
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求助IM中,协议设计时,如何更优雅的区分单聊、群聊消息?
我的消息体是
{send:"tony",receive:"ben",content:"哈哈哈哈",type:1}

当发送给个人的时候。很好办。直接找到receive的用户名的长连接 发送过去就好了。但是如果我要发送给群的话。receive就变成了群Id
{send:"tony",receive:"123",content:"哈哈哈哈",type:2}

然后我服务器查找群成员。在线的直接发送消息。现在我客户端接收到群消息。如何既能拿到谁发送的。又能拿到群ID呢。我应该怎么设计。
我这里的send 应该是群ID还是发送人的用户名。

望大佬指点一二

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:Android10和Android11的im文件储存适配下一篇:求助多个APP想提炼通用的IM服务端,有什么好的方案建议?

本帖已收录至以下技术专辑

推荐方案
评论 6
是的,你这个问题,好多人在设计这一块时有点蒙逼,要么是会搞复杂,要么是觉得不优雅。

我给你个参考,以 RainbowChat IM产品中的实现为例:

不管是单聊还是群聊,只需要3个关键字段,就可以实现你要的逻辑:

  • 1)字段1:“from”字段,表示是谁发的;
  • 2)字段2:“to”字段,表示的是要发给谁?(发给个人时这个字段放入的是用户的uid、发给群聊时这个字段放的是群id);
  • 3)字段3:“chatType”字段,比如为0时表示是单聊、为1时表示群聊(不同的值时,对应的“to”字段内容就不同)。

以上这3个字段,就能解决你的困惑,你仔细体会一下,不需要搞复杂。

这样的设计,无论是实现服务端的全量消息记录还是增量离线记录,群聊和单聊都不需要各自不同的逻辑,代码都可以重用起来,实现起来很优雅。
引用:JackJiang 发表于 2020-07-13 11:44
是的,你这个问题,好多人在设计这一块时有点蒙逼,要么是会搞复杂,要么是觉得不优雅。

我给你个参考, ...

这一块我先在基本了解了。如果现在群成员A 发送一个消息。
引用:JackJiang 发表于 2020-07-13 11:44
是的,你这个问题,好多人在设计这一块时有点蒙逼,要么是会搞复杂,要么是觉得不优雅。

我给你个参考, ...

如果群成员A发送一个消息{form:"a",to:"1","type":2,"content":"xxxxx"'}


那么群成员收到消息。怎么知道是哪个群呢。是否还需要一个字段呢
引用:JackJiang 发表于 2020-07-13 11:44
是的,你这个问题,好多人在设计这一块时有点蒙逼,要么是会搞复杂,要么是觉得不优雅。

我给你个参考, ...

如果能拿到群聊ID  发送人用户名怎么拿   应该还需要一个字段吗
引用:fanhua1994 发表于 2020-07-13 15:10
如果能拿到群聊ID  发送人用户名怎么拿   应该还需要一个字段吗

不涉及主体的辅助字段,就按需去加了
引用:fanhua1994 发表于 2020-07-13 15:10
如果能拿到群聊ID  发送人用户名怎么拿   应该还需要一个字段吗

“to”里填的就是群id啊哥
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部