V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX  ›  程序员

物联网设备与 Web 应用服务器通信,用什么通信协议比较合适?

  •  
  •   tctc4869 · Sep 30, 2020 · 7135 views
    This topic created in 2035 days ago, the information mentioned may be changed or developed.

    想让物联网设备与 Web 服务器的应用端进行通信,常用的通信协议,除了 mqtt,http 还有哪些比较合适的?

    应用层协议有一个 WebSocket,WebSocket 协议用在物联网设备与 Web 服务器之间的实现通信合适么?

    61 replies    2020-11-23 16:12:18 +08:00
    Unmurphy
        1
    Unmurphy  
       Sep 30, 2020
    xmpp
    wysnylc
        2
    wysnylc  
       Sep 30, 2020
    mqtt http2/http3 websocket
    qiayue
        3
    qiayue  
    PRO
       Sep 30, 2020
    查查资料,看看摩拜单车用啥协议,我不觉得你的设备会比摩拜单车多
    tctc4869
        4
    tctc4869  
    OP
       Sep 30, 2020
    @wysnylc http3 ?
    tctc4869
        5
    tctc4869  
    OP
       Sep 30, 2020
    @Unmurphy 这个 xmpp 协议,一般不都是用在 Im 聊天应用中么,消耗挺大的把?
    lewis89
        6
    lewis89  
       Sep 30, 2020
    websocket 你确定要在物联网这种低功耗的玩意上 保持长连接?
    tctc4869
        7
    tctc4869  
    OP
       Sep 30, 2020
    @lewis89 这样啊
    12101111
        8
    12101111  
       Sep 30, 2020
    mqtt over Websocket
    tctc4869
        9
    tctc4869  
    OP
       Sep 30, 2020
    @qiayue 谢谢,我去看看
    tctc4869
        10
    tctc4869  
    OP
       Sep 30, 2020
    mqtt over Websocket ? mqtt 与 WebSocket 的融合?
    crasa
        11
    crasa  
       Sep 30, 2020
    mqtt +1
    server
        12
    server  
       Sep 30, 2020
    看 lz 描述, 还是直接上方案 自建基于 emqx 吧 ,走平台阿里 腾讯 都行. lorawan nb-iot 看钱下单
    Bijiabo
        13
    Bijiabo  
       Sep 30, 2020   ❤️ 1
    看设备量,我认为原则上不应该让设备和 Web 应用服务器直接通讯。

    设备 MQTT 协议到 IoT Hub,分发数据或者做处理。然后 Web 服务器再从处理好的数据中拿结果,或者通过 IoT Hub 提供的能力与设备通讯。

    不是直接通讯不行,要考虑安全、量产一系列问题。
    Gitizen
        14
    Gitizen  
       Sep 30, 2020
    感觉 Mqtt over Websocket 可以吧,我最近也是想这样整,参考 Adafruit IO 的 Web 端,就是一个 JavaScript mqtt 客户端,就是 Mqtt over Websocket 。
    tctc4869
        15
    tctc4869  
    OP
       Sep 30, 2020
    @crasa 问一下,如果两个设备要通过服务器进行一对一中转数据话,排除 WebSocket,什么协议是比较适合?
    tctc4869
        16
    tctc4869  
    OP
       Sep 30, 2020
    @Bijiabo

    如果两个物联网设备要通过服务器进行一对一中转数据通信的话,排除 WebSocket 与 MQtt ?,还有什么协议是比较适合?
    kra
        17
    kra  
       Sep 30, 2020
    mqtt
    tctc4869
        18
    tctc4869  
    OP
       Sep 30, 2020
    @Bijiabo 安全?别人 tcp 接口进行黑客入侵么?
    lzyliangzheyu
        19
    lzyliangzheyu  
       Sep 30, 2020
    MQTT 算是用的比较多的吧,基于 TOPIC 的消息订阅机制,控制好 KEEPLIVE,性能开销也不大
    crasa
        20
    crasa  
       Sep 30, 2020
    @tctc4869 两个设备相互订阅。数据量小的话,可以直接传输数据;数据量大的话可以只传输消息 key,设备拿到 key 之后用你所说的 web 应用服务器对消息的 key 进行数据处理,返回到指定设备。

    鄙人拙见而已,可以再参考下面大佬的回复
    tctc4869
        21
    tctc4869  
    OP
       Sep 30, 2020
    @crasa 按你这样说的话,为了使在 mqtt 中两个设备之间能相互一对一通信,就得自己定义一下 mqtt 服务端中中某些 TOPIC 的消息处理流程
    soulzz
        22
    soulzz  
       Sep 30, 2020
    自定义协议完全可以
    设备直接发送字节流
    后端 netty 解完全可以
    dndx
        23
    dndx  
       Sep 30, 2020
    MQTT 非常方便,还可以用阿里云的 MQTT 服务,量小的话免费额度就够了,非常稳定。
    clf
        24
    clf  
       Sep 30, 2020
    MQTT 比较方便,现成的平台:EMQ
    stranger75
        25
    stranger75  
       Sep 30, 2020
    物联网内系统交互的话无脑推荐阿里云的 MQTT -doge
    manhere
        26
    manhere  
       Sep 30, 2020
    coap
    ihidchaos
        27
    ihidchaos  
       Sep 30, 2020 via Android
    mqtt-sn,coap,lwm2m
    opengps
        28
    opengps  
       Sep 30, 2020 via Android
    实际上物联网并非直接跟 web 通信,而是跟 socket 服务端通信,转发一层消息实现的物联网设备跟 web 通信
    youla
        29
    youla  
       Sep 30, 2020
    我正在做一个这样一个项目,用的是 websocket 。
    janxin
        30
    janxin  
       Sep 30, 2020
    可以
    LLaMA2
        31
    LLaMA2  
       Sep 30, 2020
    如果设备不用在意功耗问题,直接 socket 就好,不过建议你吧 socket server 剥离出来,设备和 web 服务都作为 client 端连接到 server 。这样是为了以后拓展 socket server,例如更换实现,集群,HA 能特性,而不用更改已有的 web 服务

    如果设备在意功耗,MQTT 就好,套路和上面一样。设备和 web 都作为 mqtt client,中间架 mqtt broker
    kerro1990
        32
    kerro1990  
       Sep 30, 2020
    摩拜用的微软 azure 的 IOT 服务
    ungrown
        33
    ungrown  
       Sep 30, 2020
    @Gitizen 不理解,mqtt 再套一层 ws 是图个啥
    Bijiabo
        34
    Bijiabo  
       Sep 30, 2020
    @tctc4869 这种场景,使用 MQTT,配合云平台的规则引擎,直接把一个设备的数据转到另一个设备的 topic 中,我看一些业务场景的实现是这样做的。

    这些能力,云平台普遍会提供。

    置于安全,主要是设备 MQTT 链接时候的鉴权,认证 key 怎么来的,是需要注意的
    geekvcn
        35
    geekvcn  
       Sep 30, 2020
    我觉得 QUIC 挺适合,因为物联网设备流量很小,也不怕运营商的 UDP Qos
    chihiro2014
        36
    chihiro2014  
       Sep 30, 2020
    RSocket
    a22271001
        37
    a22271001  
       Sep 30, 2020 via Android
    @geekvcn quic 不是 over udp 的吗
    geekvcn
        38
    geekvcn  
       Sep 30, 2020
    @a22271001 就是 udp 才有优势啊
    rbe
        39
    rbe  
       Sep 30, 2020
    mqtt 足够轻量,且能发又能收,基本能近似达到长连接的效果了。用阿里云的 mqtt 服务或者自建 emqx broker,qos 1 就能保证不丢消息。lz 应该说明一下为啥不愿意用 mqtt 啊?
    rockyou12
        40
    rockyou12  
       Sep 30, 2020
    mqtt 功能强又够轻量,生态还非常成熟,不是很特别的业务想不到不用的理由
    maitiantuzi
        41
    maitiantuzi  
       Sep 30, 2020
    可以开发个自己的网关,采集到设备数据后做持久化或者分发出去,比如通过 Kafka
    hotsymbol
        42
    hotsymbol  
       Oct 1, 2020
    kafka, socket, mqtt, grpc over http
    tctc4869
        43
    tctc4869  
    OP
       Oct 1, 2020
    @Bijiabo 那有 N 对设备要通过 mqtt 服务端进行一对一通信怎么办,在同一个 Topi 内 c 的发布消息话,一个设备发布消息不就成了广播了,本来就是要一对一通信的
    adek06
        44
    adek06  
       Oct 1, 2020
    MQTT +1

    用 EMQX 自建
    des
        45
    des  
       Oct 1, 2020
    mqtt 、nats 、sqs 、nsq
    另外你是觉得 mqtt 不合适吗?
    Bijiabo
        46
    Bijiabo  
       Oct 1, 2020 via iPhone
    @tctc4869 每个设备都有自己的 N 个 topic,每个 topic 对应不同用途。云端规则引擎根据消息内容标识,以及业务逻辑指定的规则,进行消息的转发,可能是 A 设备的消息转到 B 设备的特定 topic,也可能是直接转到队列进行消息处理,也可能直接存储到数据库。
    Gitizen
        47
    Gitizen  
       Oct 1, 2020
    @ungrown 这样可以方便通过防火墙,一般在网页用比较多。
    物联网硬件用原生 MQTT 连接服务器 MQTT Broker,Web 应用的前端用 Websocket MQTT 连接 Broker
    TCP MQTT Client <----> MQTT Broker <----> Websocket MQTT Client
    设备通过 MQTT 传来的数据实时在 Web 页面更新。
    aguesuka
        48
    aguesuka  
       Oct 1, 2020 via Android
    我司是国内最大的电表厂。用的是 socket 透传=> 采集器 => 主站。 没有做过的人最好不要对不熟悉的领域发表意见。
    tctc4869
        49
    tctc4869  
    OP
       Oct 1, 2020
    @des 没有这种想法
    tctc4869
        50
    tctc4869  
    OP
       Oct 1, 2020
    @Bijiabo 这样的话,就得定制一下 mqtt 服务端的某些特定 topic 下的通信处理规则,似乎这是要写代码进行配置处理的情况啊,不知道有没有无编程代码的配置方式、
    interim
        51
    interim  
       Oct 1, 2020
    @tctc4869 EMQ X 的功能足够多,ACL 配置规则很容易的...
    Bijiabo
        52
    Bijiabo  
       Oct 1, 2020
    @tctc4869 平台会有操作界面,我记得看同事处理过。
    tctc4869
        53
    tctc4869  
    OP
       Oct 1, 2020
    @Bijiabo
    @chnyuwen

    问一下,用 mqtt 做通信协议的话,为客户端进行消息推送,以及负责客户端 IM 聊天消息中转方面,能代替 WebSocket 么?
    way2explore2
        54
    way2explore2  
       Oct 1, 2020
    相信我。用最成熟的协议 mqtt




    mqtt 完全可以做轻量 im,
    Bijiabo
        55
    Bijiabo  
       Oct 1, 2020 via iPhone
    @tctc4869 如果是基于 Websocket 实现的 MQTT,是可以的。
    wudaye
        56
    wudaye  
       Oct 2, 2020 via Android
    我们当时毫无经验,用的最简单粗暴可能也是最蠢的方式,直接 netty 和设备互相编解码 tcp 上的字节流,二进制协议用的交通部的一套部标协议
    ungrown
        57
    ungrown  
       Oct 2, 2020
    @Gitizen #47 啊这样,我还以为你说 iot 设备也套 ws 呢
    interim
        58
    interim  
       Oct 7, 2020
    @tctc4869 直接去看 EMQ X 的文档就好了,查下 消息订阅模型。
    tctc4869
        59
    tctc4869  
    OP
       Nov 23, 2020
    @crasa
    @12101111
    @kra
    @dndx
    @lychs1998
    @adek06
    @des

    用 mqtt 的话,不知这样一个场景合适不?有 n 个物联网设备与服务端建立 mqtt 的长连接,物联网设备不断向 mqtt 服务端发送数据,服务端频繁地不断接收数据。这个场景用 mqtt 合适吗
    clf
        60
    clf  
       Nov 23, 2020
    @tctc4869 #59 EMQ(一个 mqtt service)就是处理这个场景的。其实就是一个消息队列的模式。
    dndx
        61
    dndx  
       Nov 23, 2020
    @tctc4869 合适,MQTT 本身就是可以双向通信的,而且还帮你处理了分包,消息分类,加密等等功能。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5706 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 424ms · UTC 09:02 · PVG 17:02 · LAX 02:02 · JFK 05:02
    ♥ Do have faith in what you're doing.