用 Java 实现 500 人及时聊天的功能,是不是只有 WebSocket 这种实现方式呢?求大佬给个思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
xkxy
V2EX    程序员

用 Java 实现 500 人及时聊天的功能,是不是只有 WebSocket 这种实现方式呢?求大佬给个思路

  •  1
     
  •   xkxy 2021-01-07 10:21:41 +08:00 6489 次点击
    这是一个创建于 1739 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。

    第 1 条附言    2021-01-07 14:17:28 +08:00

    我这个系统是web端的,看大家的意思webSocket就够了。

    另外问一下,数据存储呢?有什么好的建议嘛?MySql???

    26 条回复    2021-01-08 02:26:34 +08:00
    jiaokang
        1
    jiaokang  
       2021-01-07 10:24:07 +08:00
    MQTT
    wysnylc
        2
    wysnylc  
       2021-01-07 10:29:04 +08:00
    Leigg
        3
    Leigg  
       2021-01-07 10:34:45 +08:00 via iPhone
    当然,不是了,了解一下长连接技术。
    woodensail
        4
    woodensail  
       2021-01-07 10:55:49 +08:00
    前端常用的推送方式分 4 种
    1:短轮询,也就是定期刷新,实时性无法保证,不适用于 IM
    2:长轮询,发起请求后服务端挂起,等有通知后返回数据。前端收到后立刻发起下一次请求。改动较小
    3:长连接,发起请求后服务端利用该连接多次返回数据。改动较大
    4:websocket,双工通信,体验完爆上面所有。开发难度也不大。
    manami
        5
    manami  
       2021-01-07 11:13:27 +08:00
    java 直接上 netty
    whileFalse
        6
    whileFalse  
       2021-01-07 11:43:27 +08:00
    如果你客户端是 web 页面,只能用 websocket (轮询或长链接也能实现,但效果性能差很多)
    如果客户端是 native,选择就多很多。
    xxxy
        7
    xxxy  
       2021-01-07 11:57:10 +08:00
    500 个 websocket 链接压力不大
    yfwl
        8
    yfwl  
       2021-01-07 11:58:04 +08:00
    调用第三方 SDK,万物皆可 API !
    lancelock
        9
    lancelock  
       2021-01-07 12:06:05 +08:00
    取决于你客户端
    opengps
        10
    opengps  
       2021-01-07 12:18:00 +08:00
    并没有限制,哪怕用轮训也并不是说不可以。websocket 只是在浏览器端比较轻巧而已。
    如果要做的客户端,那么显然直接使用 socket 更方便
    难点不在客户端,而在于服务端,怎么支持不限制(高支持≈不限制)客户端数量,各种异常处理,转发消息,头一次接手的人还是有很多细节要处理的
    hyxj1229
        11
    hyxj1229  
       2021-01-07 12:26:07 +08:00
    mango88
        12
    mango88  
       2021-01-07 14:19:33 +08:00
    openfire
    gochat
        13
    gochat  
       2021-01-07 14:22:26 +08:00
    genal
        14
    genal  
       2021-01-07 14:44:29 +08:00
    https://github.com/genaller/genal-chat 有个现成的 web 聊天系统,内网或者带宽够五百人是可以的,fiora 也不错
    firechat
        15
    firechat  
       2021-01-07 14:50:16 +08:00   1
    IM 要想做好需要花费非常多时间和精力,如果没有办法投入大量人力和时间,最好别自己来开发。可以选用云通讯平台,直接使用他们的 sdk 就行,也可以选择使用我们的 https://github.com/wildfirechat 私有部署,需要有一定的定制开发和运维能力,需要付费,可以先试用后购买。
    hantsy
        16
    hantsy  
       2021-01-07 14:52:05 +08:00
    web socket 处理这点小意思啊,不过后面的 Web socket session 处理需要另外缓冲处理( Redis 等)。客户端也容易,Android,WebSocket 都是很容易支持。


    简单的 WebSocket 例子:

    https://github.com/hantsy/angular-spring-websocket-sample

    RSocket 例子:

    https://github.com/hantsy/angular-spring-rsocket-sample

    SSE+ 普通 HTTP Post (这个比较简单,也容易处理):

    https://github.com/hantsy/angular-spring-sse-sample
    hantsy
        17
    hantsy  
       2021-01-07 15:00:00 +08:00
    喜欢挑战,可以试用 RSocket,各种语言支持也很好。

    https://github.com/rsocket
    hantsy
        18
    hantsy  
       2021-01-07 15:03:44 +08:00
    另外对于聊天这种程序,要求即时响应,文本居本,Key/value 数据库是更好的选择。

    我开发过一个 Angular+Firebase 项目,Firebase 本身的 JS API 都基于 WebSocket 协议的,所以感觉这也是个不错的选择。Firebase 官方还有专门的 Chat UI 扩展。
    chinvo
        19
    chinvo  
       2021-01-07 15:12:52 +08:00 via iPhone
    直接 ejabberd
    oxromantic
        20
    oxromantic  
       2021-01-07 15:21:16 +08:00
    500 人聊天?自己做还不如花钱一个月 999 有成吨的供应商
    azuremem
        21
    azuremem  
       2021-01-07 16:48:56 +08:00
    rabbitmq 貌似可以
    iintothewind
        22
    iintothewind  
       2021-01-07 16:53:37 +08:00 via iPhone
    用 mqtt 就可以,可以参考我的:
    https://home-chat.vercel.app
    不过不是 Java 项目,后端不需要代码,只需要 mqtt 的服务就可以了
    hantsy
        23
    hantsy  
       2021-01-07 17:25:10 +08:00
    @azuremem RabbitMQ + STOMP + SockJS 这是个经典组合。除了 NodeJS 的 SocketIO 外。
    GBdG6clg2Jy17ua5
        24
    GBdG6clg2Jy17ua5  
       2021-01-07 18:40:49 +08:00 via iPhone
    500 人,直接短轮询
    Goat121
        25
    Goat121  
       2021-01-07 23:44:56 +08:00
    500 人随便啥都行,webSocket 最简单。
    上面还有 RabbitMQ 都来了,面试八股文看多了把。
    如果是需要 MQ 的量级,还用这些?
    哪个巨型 IM 不是 tcp/udp 上实现的私有协议啊
    xcstream
        26
    xcstream  
       2021-01-08 02:26:34 +08:00
    mqtt broker 可以单独启动
    java 可以做业务端连接 mqtt 提供服务
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     858 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 19:46 PVG 03:46 LAX 12:46 JFK 15:46
    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