聊天软件中要实现一个在线匹配聊天,不知道如何实现来请教下 v2 朋友
用户点击匹配聊天,系统随机让两个人同时匹配的人聊天,直到有一人点击离开后才能再次匹配,请问这样的关系如何建立。需要用到什么
java
thank !!!
1
imxthd OP 目前想到的,用 redis 将两人建立关系 离开就删除关系 (这样快速重复的增删会不会影响 redis 性能?)
另外,肯定不止两人同时匹配, 需要用什么技术处理匹配保证性能要求? |
2
geying 2018-10-12 16:52:29 +08:00
为什么我第一反应想到的是 qq 游戏大厅里的一堆桌子
|
3
limuyan44 2018-10-12 17:19:50 +08:00 via Android
维护一个匹配池?匹配的全部入池
|
4
yoshiyuki 2018-10-12 17:34:37 +08:00
先生成一定数量的匹配 id,放在 redis 列表中,例如 1,1,2,2,3,3......
每当一个用户需要匹配时,从列表取出一个匹配 id,并且用 redis 的 key-value 维护这种结对匹配 当有用户离开时,把对应匹配 id 的两个人都脱离匹配 |
5
Kaiv2 2018-10-12 17:40:57 +08:00
建议把用户分组,并行匹配
|
6
fffang 2018-10-12 17:46:56 +08:00
你在抄 soul app ?
|
7
visitant 2018-10-12 18:25:17 +08:00 via iPhone
建个哈希表都可以,id 为索引,表里存匹配的对方的 id,添加时添加两条,删除时删两条,空间性能都有保障,还很简单
|
8
visitant 2018-10-12 18:27:41 +08:00 via iPhone
emm,你可能需要在表里存两人的 id,不然再哈希有问题
|
10
likuku 2018-10-12 18:34:38 +08:00
既然随机了,那就随机在在线的人里选吧...
|
11
owenliang 2018-10-12 19:56:26 +08:00 via Android
我感觉不难,可能是楼主想复杂了。
点击匹配的用户就进入一池子里,系统不停的撮合池子中的用户就行了,撮合好了从池子里删掉,推给两个拥护匹配结果。 实现肯定是需要常驻服务的,池子可以是纯内存的,也可以是 redis,池子里的用户得上报心跳,目的是确保客户端是在等待匹配状态的。 |
12
imxthd OP |
13
w88975 2018-10-12 22:53:21 +08:00
叔叔不约
|
15
luozic 2018-10-25 22:59:53 +08:00 via iPhone
向量 按维度 random
|
16
puzzle9 2021-03-13 15:51:22 +08:00
我也想到了这个 也搜索了大半天 估计关键词不对 然后看到了这个帖子
话说 这个聊天软件上线了没 |