请教,如何实现所有用户在一个群组中聊天? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
lucifeSe7En
V2EX    程序员

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

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

    有这样一个需求,需要 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 个小群组组成一个大群组
    rb6221
        11
    rb6221  
       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 群同聊刷新的 都快看不出来了,感觉电报应该没有全部显示
    KagurazakaNyaa
        14
    KagurazakaNyaa  
       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  
    PRO
       2020-12-24 18:21:35 +08:00 via Android
    直播啊
    Tink
        17
    Tink  
    PRO
       2020-12-24 18:21:44 +08:00 via Android
    弹幕
    oneonesv
        18
    oneonesv  
       2020-12-24 18:24:03 +08:00
    打电话给腾讯销售给你提高上限
    14v45mJPBYJW8dT7
        19
    14v45mJPBYJW8dT7  
       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     Solana     2535 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 15:34 PVG 23:34 LAX 08:34 JFK 11:34
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86