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

请教,如何实现所有用户在一个群组中聊天?

  •  
  •   lucifeSe7En · 2020-12-24 16:32:14 +08:00 · 3845 次点击
    这是一个创建于 1210 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有这样一个需求,需要 app 的所有用户可以在公屏上进行聊天。因为我们选用的腾讯的即时通讯 im,腾讯那边的群组系统并不能满足我们的需求。app 的用户数量初步预计为>10000 人,腾讯方的群组系统,只有直播群是没有人数限制的,但是有一点,直播群是没有消息记录的。另外几个的群组虽然有历史消息,但是最高也只支持 6000 人的上限。想问问有没有只通过腾讯就能解决的方案?如果没有,其他的解决方案也可以

    40 条回复    2020-12-25 12:51:08 +08:00
    takemeaway
        1
    takemeaway  
       2020-12-24 16:34:01 +08:00
    想象一下一万人在一个群里面,说一句话都被秒淹没。
    aloyuu
        2
    aloyuu  
       2020-12-24 16:36:25 +08:00 via Android
    1 万人同时说话,1 秒 1 万条
    RudyS
        3
    RudyS  
       2020-12-24 16:37:58 +08:00
    discord ?
    wr516516
        4
    wr516516  
       2020-12-24 16:40:17 +08:00
    这能聊起来吗?
    k1z
        5
    k1z  
       2020-12-24 16:49:23 +08:00
    电报不是这样的吗。 之前胴体好像 14W 人?
    AoEiuV020
        6
    AoEiuV020  
       2020-12-24 16:52:56 +08:00
    提到多人群就是电报了,几十万人群狂刷消息一点不卡,不知道怎么做到的,
    opengps
        7
    opengps  
       2020-12-24 16:59:06 +08:00
    自己能实现,但是这个并发规模延迟会很明显。任何一个人发言,都要对另外上万 tcp 连接下发消息
    opengps
        8
    opengps  
       2020-12-24 17:02:30 +08:00   ❤️ 1
    说电报不卡的,只是作为自己一端的感受。实际这么大规模的批量下发和延迟,本身就是个难以突破的问题,更何况各位用电报本身就有网络线路上的一层高延迟了
    lucifeSe7En
        9
    lucifeSe7En  
    OP
       2020-12-24 17:31:29 +08:00
    @takemeaway 只需要保证可以在群里说话就行,同时说话的情况先不考虑
    jhiiii
        10
    jhiiii  
       2020-12-24 17:45:13 +08:00
    1, 反过来,app 去后端拉。 一边推一边拉
    or
    2,N 个小群组组成一个大群组
    janus77
        11
    janus77  
       2020-12-24 17:47:05 +08:00
    电报实现了,但是具体技术就不是我能知道的了 属于商业机密吧
    liian2019
        12
    liian2019  
       2020-12-24 17:48:51 +08:00
    如果是 java 的话 ,推荐 netty
    annielong
        13
    annielong  
       2020-12-24 17:51:21 +08:00
    光看百人的 qq 群同聊刷新的 都快看不出来了,感觉电报应该没有全部显示
    XiLingHost
        14
    XiLingHost  
       2020-12-24 17:51:37 +08:00
    要不然试试用 xmpp 的 muc ?搞个 ejabberd 集群试试
    kiracyan
        15
    kiracyan  
       2020-12-24 17:54:11 +08:00
    感觉是个伪需求 1W 人同时在线聊天 想想就可怕
    Tink
        16
    Tink  
       2020-12-24 18:21:35 +08:00 via Android
    直播啊
    Tink
        17
    Tink  
       2020-12-24 18:21:44 +08:00 via Android
    弹幕
    oneonesv
        18
    oneonesv  
       2020-12-24 18:24:03 +08:00
    打电话给腾讯销售给你提高上限
    rimutuyuan
        19
    rimutuyuan  
       2020-12-24 18:24:39 +08:00
    对,直播弹幕,像 pdd 开播那天都卡死了
    HeiHeiDe
        20
    HeiHeiDe  
       2020-12-24 18:29:00 +08:00 via iPhone
    直播
    coderxy
        21
    coderxy  
       2020-12-24 18:37:18 +08:00
    这种全服的就是可以用聊天室啊,在线就收到,不在线就收不到呗。 或者想的简单一点,用 http,发消息就自己写到数据库里,然后所有在线用户每隔 1S 拉一下最新消息,也能实现。
    vizee
        22
    vizee  
       2020-12-24 18:37:31 +08:00
    用腾讯直播方案,自己再写一个服务端收集直播间消息,给客户端查历史消息用就行了
    firefox12
        23
    firefox12  
       2020-12-24 18:44:25 +08:00
    14 万用户 又不是都在线, 消息都在内存里,拉起来很快的,毫无难度。不去实现这种需求是 因为这种需求跑起来根本毫无体验。我能开发出 350 公里的车,谁能开?舒马赫吗?卖给谁呢? 所以谁去造这种车?
    dcty
        24
    dcty  
       2020-12-24 18:53:11 +08:00
    腾讯方的群组系统,只有直播群是没有人数限制的,但是有一点,直播群是没有消息记录的。
    =======================================================
    用户发送消息的时候往自己的服务器发一份。
    另外,消息分发肯定要有策略的,考虑极端情况,一秒内,10000 人都发了消息,客户端接收这么多消息并且进行上屏渲染滚动,手机会成为暖手宝的。
    duxiansen
        25
    duxiansen  
       2020-12-24 18:59:23 +08:00
    之前不都是吐槽微信群人数限制的太少了,tg 都能支持几十万人,看前面评论,风向咋变了
    Lemeng
        26
    Lemeng  
       2020-12-24 19:18:19 +08:00
    这样的大群,没意义,两千人的群,还能接受,平日都会信息淹没。人说,群里和你说了,可真没看到,除非是 @过‘才能收到
    当然如果僵尸账号多的话,就另当别论了
    dimlau
        27
    dimlau  
       2020-12-24 19:49:14 +08:00
    @opengps

    「不卡」这里就是指的自己手机不卡顿;延迟是另一码事。

    这是相对于一些即时通讯软件大量消息时软件交互就卡来说的。
    laminux29
        28
    laminux29  
       2020-12-24 23:08:02 +08:00
    服务器倒是没什么难度,毕竟才万人,从平时的经验来看,会踊跃发言的人很少。

    但问题是,客户端能否扛得住压力,而且客户端掉线后,还要拉历史记录,压力全在客户端了。

    这个问题就转化为:当客户端性能不足时,如何取舍业务,来优化用户体验。
    clayyj1210
        29
    clayyj1210  
       2020-12-24 23:38:52 +08:00
    @laminux29 服务器倒是没什么难度。。。信息扩散很恐怖。
    puzzle9
        30
    puzzle9  
       2020-12-24 23:42:20 +08:00
    使用 socket.io
    然后 自研
    westoy
        31
    westoy  
       2020-12-24 23:49:03 +08:00   ❤️ 1
    分布式 MQ + P2P 广播 + 客户端去重

    问题是鹅厂都主动规避的业务场景, 你们为啥头铁....
    wzzzx
        32
    wzzzx  
       2020-12-24 23:56:07 +08:00
    首先应该讨论一下需求的合理性
    Maboroshii
        33
    Maboroshii  
       2020-12-24 23:58:12 +08:00
    作为开发还是讨论一波,虽然楼主问的是腾讯的方案。
    客户端当然是要分页拉消息,永远只拉取最新的 n 条新消息然后根据需要往回读。
    服务器就先存储后转发就行。
    kenanremix
        34
    kenanremix  
       2020-12-25 00:04:59 +08:00 via iPhone
    网易的可以,上家公司群里 4w 人 都可以说话
    dorothyREN
        35
    dorothyREN  
       2020-12-25 00:13:03 +08:00
    telegram 群支持 20w 人
    yanqiyu
        36
    yanqiyu  
       2020-12-25 00:32:44 +08:00
    telegram 大概没问题,但是看起来不保证收到消息先后顺序在每个客户端一致
    yfwl
        37
    yfwl  
       2020-12-25 02:41:08 +08:00
    这么多人聊天不行,要不弹幕吧 然后不拉历史消息或者留存最近的历史消息
    Coolee
        38
    Coolee  
       2020-12-25 08:48:47 +08:00 via Android
    几百人的群体验已经很差了,一万人的体验。。。如果能限制 5 秒连续发两条
    shunconf
        39
    shunconf  
       2020-12-25 08:59:40 +08:00
    telegram +1 但是你的考虑到所有的用户都有翻墙软件
    opengps
        40
    opengps  
       2020-12-25 12:51:08 +08:00 via Android
    @yanqiyu 其实 tg 是个非常简陋的程序,看安装包就知道了,卡,其实有一层原因在于干的事情有点多,比如 qq 多出来的富文本处理,气泡效果,各种自定义动画,甚至贴表情,个顶个的功能都是重武器,没法轻的了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5341 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:04 · PVG 16:04 · LAX 01:04 · JFK 04:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.