V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imxthd
V2EX  ›  Java

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

  •  
  •   imxthd · 2018-10-12 15:56:54 +08:00 · 3691 次点击
    这是一个创建于 2230 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    java

    thank !!!

    第 1 条附言  ·  2018-10-12 21:41:02 +08:00
    不是抄 soul,应该搭不上边吧。。
    16 条回复    2021-03-13 15:51:22 +08:00
    imxthd
        1
    imxthd  
    OP
       2018-10-12 16:12:13 +08:00
    目前想到的,用 redis 将两人建立关系 离开就删除关系 (这样快速重复的增删会不会影响 redis 性能?)

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

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

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

    用户表中有一个匹配 id 字段,如果两人匹配成功 生成一个唯一匹配 id 绑定到两个用户匹配 id 字段上。离开即清空两人的匹配 id
    w88975
        13
    w88975  
       2018-10-12 22:53:21 +08:00
    叔叔不约
    imxthd
        14
    imxthd  
    OP
       2018-10-20 19:24:14 +08:00
    @w88975 我看了一下,跟我想要实现的功能太像了!
    luozic
        15
    luozic  
       2018-10-25 22:59:53 +08:00 via iPhone
    向量 按维度 random
    puzzle9
        16
    puzzle9  
       2021-03-13 15:51:22 +08:00
    我也想到了这个 也搜索了大半天 估计关键词不对 然后看到了这个帖子
    话说 这个聊天软件上线了没
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3866 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:32 · PVG 18:32 · LAX 02:32 · JFK 05:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.