在线匹配功能要怎么实现?

2018-10-12 15:56:54 +08:00
 imxthd

聊天软件中要实现一个在线匹配聊天,不知道如何实现来请教下 v2 朋友

用户点击匹配聊天,系统随机让两个人同时匹配的人聊天,直到有一人点击离开后才能再次匹配,请问这样的关系如何建立。需要用到什么

java

thank !!!

3719 次点击
所在节点    Java
16 条回复
imxthd
2018-10-12 16:12:13 +08:00
目前想到的,用 redis 将两人建立关系 离开就删除关系 (这样快速重复的增删会不会影响 redis 性能?)

另外,肯定不止两人同时匹配, 需要用什么技术处理匹配保证性能要求?
geying
2018-10-12 16:52:29 +08:00
为什么我第一反应想到的是 qq 游戏大厅里的一堆桌子
limuyan44
2018-10-12 17:19:50 +08:00
维护一个匹配池?匹配的全部入池
yoshiyuki
2018-10-12 17:34:37 +08:00
先生成一定数量的匹配 id,放在 redis 列表中,例如 1,1,2,2,3,3......
每当一个用户需要匹配时,从列表取出一个匹配 id,并且用 redis 的 key-value 维护这种结对匹配
当有用户离开时,把对应匹配 id 的两个人都脱离匹配
Kaiv2
2018-10-12 17:40:57 +08:00
建议把用户分组,并行匹配
fffang
2018-10-12 17:46:56 +08:00
你在抄 soul app ?
visitant
2018-10-12 18:25:17 +08:00
建个哈希表都可以,id 为索引,表里存匹配的对方的 id,添加时添加两条,删除时删两条,空间性能都有保障,还很简单
visitant
2018-10-12 18:27:41 +08:00
emm,你可能需要在表里存两人的 id,不然再哈希有问题
pipixia
2018-10-12 18:30:34 +08:00
@fffang haha 我也想到 soul
likuku
2018-10-12 18:34:38 +08:00
既然随机了,那就随机在在线的人里选吧...
owenliang
2018-10-12 19:56:26 +08:00
我感觉不难,可能是楼主想复杂了。

点击匹配的用户就进入一池子里,系统不停的撮合池子中的用户就行了,撮合好了从池子里删掉,推给两个拥护匹配结果。

实现肯定是需要常驻服务的,池子可以是纯内存的,也可以是 redis,池子里的用户得上报心跳,目的是确保客户端是在等待匹配状态的。
imxthd
2018-10-12 22:16:15 +08:00
@owenliang
@visitant
@limuyan44
@yoshiyuki
目前所想到的(信息全存在 redis 中)

用户表中有一个匹配 id 字段,如果两人匹配成功 生成一个唯一匹配 id 绑定到两个用户匹配 id 字段上。离开即清空两人的匹配 id
w88975
2018-10-12 22:53:21 +08:00
叔叔不约
imxthd
2018-10-20 19:24:14 +08:00
@w88975 我看了一下,跟我想要实现的功能太像了!
luozic
2018-10-25 22:59:53 +08:00
向量 按维度 random
puzzle9
2021-03-13 15:51:22 +08:00
我也想到了这个 也搜索了大半天 估计关键词不对 然后看到了这个帖子
话说 这个聊天软件上线了没

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/497091

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX