• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xkxy
V2EX  ›  程序员

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

  •  1
     
  •   xkxy · Jan 7, 2021 · 7633 views
    This topic created in 2127 days ago, the information mentioned may be changed or developed.

    如题。

    Supplement 1  ·  Jan 7, 2021

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

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

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

    https://github.com/rsocket
    hantsy
    hantsy
    Jan 7, 2021
    18
    另外对于聊天这种程序,要求即时响应,文本居本,Key/value 数据库是更好的选择。

    我开发过一个 Angular+Firebase 项目,Firebase 本身的 JS API 都基于 WebSocket 协议的,所以感觉这也是个不错的选择。Firebase 官方还有专门的 Chat UI 扩展。
    chinvo
    chinvo
    Jan 7, 2021 via iPhone
    19
    直接 ejabberd
    oxromantic
    oxromantic
    Jan 7, 2021
    20
    500 人聊天?自己做还不如花钱一个月 999 有成吨的供应商
    azuremem
    azuremem
    Jan 7, 2021
    21
    rabbitmq 貌似可以
    iintothewind
    iintothewind
    Jan 7, 2021 via iPhone
    22
    用 mqtt 就可以,可以参考我的:
    https://home-chat.vercel.app
    不过不是 Java 项目,后端不需要代码,只需要 mqtt 的服务就可以了
    hantsy
    hantsy
    Jan 7, 2021
    23
    @azuremem RabbitMQ + STOMP + SockJS 这是个经典组合。除了 NodeJS 的 SocketIO 外。
    GBdG6clg2Jy17ua5
    GBdG6clg2Jy17ua5
    Jan 7, 2021 via iPhone
    24
    500 人,直接短轮询
    Goat121
    Goat121
    Jan 7, 2021
    25
    500 人随便啥都行,webSocket 最简单。
    上面还有 RabbitMQ 都来了,面试八股文看多了把。
    如果是需要 MQ 的量级,还用这些?
    哪个巨型 IM 不是 tcp/udp 上实现的私有协议啊
    xcstream
    xcstream
    Jan 8, 2021
    26
    mqtt broker 可以单独启动
    java 可以做业务端连接 mqtt 提供服务
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2867 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 13:17 · PVG 21:17 · LAX 05:17 · JFK 08:17
    ♥ Do have faith in what you're doing.