[求助] 手机端 app 实时接收一个服务端事件的优雅方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon
V2EX    程序员

[求助] 手机端 app 实时接收一个服务端事件的优雅方案

  •  
  •   rizon
    othorizon 144 天前 2249 次点击
    这是一个创建于 144 天前的主题,其中的信息可能已经有所发展或是发生改变。

    手机端的 app ( ios 、android )。
    需求是想要尽可能实时的接收服务端主动发起的一个事件,不知道有什么方案可以做。

    最简单的是轮询,但是几秒钟轮训一下总觉得太不优雅。

    再者就是 websocket 的,但是这样服务端要维护所有的客户端的长链接,对服务端架构要求和成本变高了。

    然后我就不知道有什么好的方案了,求大佬们指导。

    说到这,我也好奇,打车、外卖、共享单车这类产品他们是怎么做的实时刷新数据的?

    第 1 条附言    144 天前
    看到大家回帖我突然意识到。
    可以用长链接,我没必要自己搭建服务啊。有第三方服务可以用不就行了。

    所以不管是 websocket 还是 MQ 。
    请大家给推荐一下合适的,这种用于客户端和服务端通信的云服务吧。谢谢
    第 2 条附言    144 天前
    感谢大家的帮助。
    目前初步决定采用 MQTT 协议, 托管 broker 服务使用 emqx 家的。(如果有更好的推荐,欢迎推荐哈,谢谢)。

    目前的场景主要是服务端推送客户端。

    如果未来有服务端接收的需求:
    如果采用云服务器部署,没什么问题。
    如果服务端未来采用 servless 架构,则使用 mqtt 转 http 协议来实现通知。

    以上分享给大家, 也作为自己的笔记留用
    16 条回复    2025-05-19 20:07:10 +08:00
    xnode
        1
    xnode  
       144 天前
    接入 第三方推送或者厂家的推送,或者使用 sse 自建
    CodingIran
        2
    CodingIran  
       144 天前
    移动端推送需要用户的授权,通常不会作为稳定的实时接收服务端消息的方案
    WebSocket 又被你拒了
    常用的只剩下 MQTT 和 Server-Sent Events(SSE) 了
    vincentWdp
        3
    vincentWdp  
       144 天前
    还是 websocket, 但是用这个: https://www.phoenixframework.org/
    lucasdev
        4
    lucasdev  
       144 天前
    想要实时肯定是要长连接的,websocket 没那么不能接受。

    可以看看极光推送,友盟 U-Push 的文档。
    rizon
        5
    rizon  
    OP
       144 天前
    @lucasdev 这是用来推送系统通知的吧。我是需要客户端内部接收通知用的。 客户端有 android 、ios 还有 unity 的
    cornorj6
        6
    cornorj6  
       144 天前
    MQTT
    calmWei
        7
    calmWei  
       144 天前
    SSE ,本质上也是一种轮训
    rizon
        8
    rizon  
    OP
       144 天前
    @cornorj6 是的,刚才调研了一下,目前感觉 MQTT 比较合适。正在找一个合适的 MQTT 托管服务
    lucasdev
        9
    lucasdev  
       144 天前
    @rizon #5 除了系统通知,这些平台也支持自定义消息,不显示在通知栏,而是自己注册回调在代码里来处理。
    sunny352787
        10
    sunny352787  
       144 天前
    什么类型的呢?公司的就直接用钉钉、企业微信、飞书的机器人呗
    sunny352787
        11
    sunny352787  
       144 天前
    @sunny352787 哦哦理解错了,忽略我说的...
    lqbk
        12
    lqbk  
       144 天前
    你这种 App 场景 如果消息到达率是关键指标 用 im 方案是最好,拓展性强、能接入系统级的推送服务、定位消息触达方便。

    就是得花钱。
    orcinus
        13
    orcinus  
       144 天前
    okkkk
        14
    okkkk  
       143 天前
    我倒是觉得长链接除了看起来不太优雅,对于资源有限,试错成本有限,时间有限的情况下。是最优雅的解决方案。低学习成本和低复杂度,蛮优雅的。

    所以还是要看给你的时间和资源是否足够你折腾,否则就长链接。性能瓶颈了再考虑优化的事。
    prosgtsr
        15
    prosgtsr  
       143 天前
    直播公司,用的 xmpp
    不过这是很多年前就用的了,现在你尽可以试试 mqtt 啥的呗。
    Andrue
        16
    Andrue  
       143 天前
    FOSS 软件领域有 unipush 这类项目,你可以参考下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3183 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 10:49 PVG 18:49 LAX 03:49 JFK 06:49
    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