V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
reallittoma
V2EX  ›  问与答

要在 APP 上实现接收消息推送,用 MQTT 做合适吗?

  •  
  •   reallittoma · 2022-08-21 23:06:06 +08:00 · 2330 次点击
    这是一个创建于 832 天前的主题,其中的信息可能已经有所发展或是发生改变。

    准备给我自己的一个跨平台 App 加一个接受消息推送的功能,初步调研了一下发现 MQTT 十分符合需求。 但我对 MQTT 了解得不是很多,只知道在 IoT 领域应用很广泛。如果用在一般的 App 上,会不会有什么隐患(安全性问题之类的)?

    13 条回复    2022-08-22 13:17:45 +08:00
    darkengine
        1
    darkengine  
       2022-08-21 23:48:07 +08:00
    如果 app 没有运行的情况下需要接收推送,那么这个方案不可行。
    reallittoma
        2
    reallittoma  
    OP
       2022-08-21 23:53:28 +08:00
    @darkengine #1 很对,但目前的需求只需要在 APP 运行时能接收推送即可。
    hoogle
        3
    hoogle  
       2022-08-22 00:01:38 +08:00
    还是看具体场景,不是实时性特别强或者 IM 之类的话,可能通过轮询或者前后台切换的时机请求一下数据就解决了。。
    reallittoma
        4
    reallittoma  
    OP
       2022-08-22 00:07:47 +08:00
    @hoogle #3 主要是考虑到自己实现轮询还要维护一套代码,还不如用现有的成熟技术来做。
    ysc3839
        5
    ysc3839  
       2022-08-22 04:01:40 +08:00
    建议 WebSocket 或者新出的 WebTransport https://web.dev/i18n/zh/webtransport/
    kkocdko
        6
    kkocdko  
       2022-08-22 04:28:20 +08:00
    看起来这个需求只需要接受推送,不需要双工(双向通信)。所以 5 楼建议之外,还有一个 SSE ( https://developer.mozilla.org/zh-CN/docs/Web/API/EventSource ),无需手动处理断线重连等逻辑,且完全基于 HTTP ,引入的依赖相对 WebSocket 更少。

    不过我感觉轮询可能真的更好,如果时效性要求不高的话。HTTP 轮询下也就一个循环的事情,“还要维护一套代码”从何而来,至于安全性…哦好吧我可能不太了解你的需求。
    whyrookie
        7
    whyrookie  
       2022-08-22 09:59:18 +08:00
    最近刚使用极光推送,目前还不清楚具体的效果怎么样。
    yangzzzzzz
        8
    yangzzzzzz  
       2022-08-22 10:04:58 +08:00
    只接收的话 sse 就够了,双工的话 ws/wss ,mqttjs 的实现就是 ws/wss ,你说的客户端应该也是吧。
    BugCry
        9
    BugCry  
       2022-08-22 10:27:26 +08:00 via Android   ❤️ 1
    @whyrookie 极光会给你推广告,这个坑特别隐蔽
    xiaoliu926
        10
    xiaoliu926  
       2022-08-22 10:37:04 +08:00
    我们给 ZF 做的 APP 就是用的 极光+小米+华为,三家推送,目前还可以
    whyrookie
        11
    whyrookie  
       2022-08-22 10:45:43 +08:00
    @BugCry #9 这太恶心了
    ysc3839
        12
    ysc3839  
       2022-08-22 11:37:38 +08:00
    又去看了下 MQTT 的介绍,相对 WebSocket 大概是数据量少、有 QoS 功能,我不确定实际是否需要这些功能。
    @kkocdko #6 提到的 EventSource 感觉已经够用了,除非要求推送到达后客户端回复确认。
    ql562482472
        13
    ql562482472  
       2022-08-22 13:17:45 +08:00
    轮训和推送比起来 轮询的可靠性会更高,推送的复杂度很高,想做可靠就更高了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   941 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:40 · PVG 04:40 · LAX 12:40 · JFK 15:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.