默认
发表评论 14
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求助如何生成IM单聊中聊天消息的会话id
阅读(21950) | 评论(14 收藏 淘帖1
A和B B和A 应该生成一个会话的id,有什么方案可以实现?现在的方案是:
public static String generateP2PId(String fromId,String toId){
    int i = fromId.compareTo(toId);
    if(i < 0){
        return toId+"|"+fromId;
    }else if(i > 0){
        return fromId+"|"+toId;
    }

    throw new RuntimeException("");
}

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

标签:求助 IM开发
上一篇:求教Netty服务端如何快速感知客户端断网的下一篇:求教IM中文件消息时,文件传输卡顿,聊天发消息会变迟钝

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

推荐方案
评论 14
聊天类型+A的uid+B的uid就能组成唯一会话id,为什么要去折腾什么生成会话id。。。
引用:JackJiang 发表于 2022-10-20 20:49
聊天类型+A的uid+B的uid就能组成唯一会话id,为什么要去折腾什么生成会话id。。。

那反过来 B 和 A呢?
因为a和b的会话 跟 b和a的会话是一样的要公用一些属性
引用:frfr46467979 发表于 2022-10-21 08:06
那反过来 B 和 A呢?
因为a和b的会话 跟 b和a的会话是一样的要公用一些属性

就我个人体会来说,im里并不需要什么明确的会话id这个东西,就拿我的RainbowChat体会来说,所有的消息,你存在本地的有3个关键字段:chatType、chatId、senderUid,当是群聊时chatId就是群id;当是单聊时chatId就是friendUid。

硬要说会话id的话,chatType、chatId、senderUid这3个字段组成的结果就是个唯一会话id。

你体会一下,这样的结构,完全可以描述你客户端无论是界面显示还是数据库存储的聊天消息数据结构。
引用:JackJiang 发表于 2022-10-21 10:56
就我个人体会来说,im里并不需要什么明确的会话id这个东西,就拿我的RainbowChat体会来说,所有的消息, ...

我们的会话表也是这样设计的。
现在是服务端有个问题。比方说A和B有一个共享的变量消息总数。A和B之间发送了100条消息 这个100A看到是100B看到也是100,A给B发100+1,B给A发100+1.
引用:frfr46467979 发表于 2022-10-21 11:57
我们的会话表也是这样设计的。
现在是服务端有个问题。比方说A和B有一个共享的变量消息总数。A和B之间发 ...

我不理解你的需求
引用:JackJiang 发表于 2022-10-21 14:51
我不理解你的需求

需求是这样的我们要再会话上体现这个会话发了多少红包。
群的话直接群内的人发红包统计这个群即可
但是单人聊天的时候,A发给B和B发给A应该是统计的应该是同一个值(即A给B发是+1,B给A发也是给这个值+1,A给C发和C给A发是一个新的变量+1)
引用:JackJiang 发表于 2022-10-21 14:51
我不理解你的需求

因此需要一个A和B的id 生成一个新的id,用来表示AB 和 BA 唯一
引用:frfr46467979 发表于 2022-10-21 16:13
需求是这样的我们要再会话上体现这个会话发了多少红包。
群的话直接群内的人发红包统计这个群即可
但是 ...

我明白你的意思,你服务端存储的这两人互为好友,其实是有两条数据库记录对吧。
引用:JackJiang 发表于 2022-10-21 16:17
我明白你的意思,你服务端存储的这两人互为好友,其实是有两条数据库记录对吧。

是的有两条记录
引用:frfr46467979 发表于 2022-10-21 16:20
是的有两条记录

那你的实现上应该是,谁发的红包记在谁的头上,你想统计这个会话的总红包数,就是两者相加。
这样设计才符合逻辑,才更优雅。

做技术,但凡逻辑上感觉很别扭时,那很有可能就是思路想错了,硬来的话,代码也会很别扭
引用:JackJiang 发表于 2022-10-21 16:25
那你的实现上应该是,谁发的红包记在谁的头上,你想统计这个会话的总红包数,就是两者相加。
这样设计才 ...

我们想放在redis上所以想用一个key去标识,发一个直接key自增就行了。群也是这样,对群的key自增就行。
你这种方案已经很可以了吧
uid+uid来个字典排序把,不管是发送to的uid+form的uid还是form的uid+to的uid都会是一个唯一值
引用:fuyoo 发表于 2023-12-15 22:19
uid+uid来个字典排序把,不管是发送to的uid+form的uid还是form的uid+to的uid都会是一个唯一值

uid可以保证唯一性,简单好用
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部