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

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

  •  
  •   imxthd · 59 天前 · 1471 次点击
    这是一个创建于 59 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    java

    thank !!!

    第 1 条附言  ·  59 天前
    不是抄 soul,应该搭不上边吧。。
    15 回复  |  直到 2018-10-25 22:59:53 +08:00
        1
    imxthd   59 天前
    目前想到的,用 redis 将两人建立关系 离开就删除关系 (这样快速重复的增删会不会影响 redis 性能?)

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

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

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

    用户表中有一个匹配 id 字段,如果两人匹配成功 生成一个唯一匹配 id 绑定到两个用户匹配 id 字段上。离开即清空两人的匹配 id
        13
    w88975   59 天前
    叔叔不约
        14
    imxthd   51 天前
    @w88975 我看了一下,跟我想要实现的功能太像了!
        15
    luozic   46 天前 via iPhone
    向量 按维度 random
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3595 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 18ms · UTC 07:01 · PVG 15:01 · LAX 23:01 · JFK 02:01
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1