V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lucifeSe7En
V2EX  ›  程序员

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

  •  
  •   lucifeSe7En · Dec 24, 2020 · 4907 views
    This topic created in 1950 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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