物联网设备与 Web 应用服务器通信,用什么通信协议比较合适? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX    程序员

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

  • &nbs;
  •   tctc4869 2020-09-30 15:37:43 +08:00 6815 次点击
    这是一个创建于 1897 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

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




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

    用 mqtt 的话,不知这样一个场景合适不?有 n 个物联网设备与服务端建立 mqtt 的长连接,物联网设备不断向 mqtt 服务端发送数据,服务端频繁地不断接收数据。这个场景用 mqtt 合适吗
    clf
        60
    clf  
       2020-11-23 16:11:52 +08:00
    @tctc4869 #59 EMQ(一个 mqtt service)就是处理这个场景的。其实就是一个消息队列的模式。
    dndx
        61
    dndx  
       2020-11-23 16:12:18 +08:00
    @tctc4869 合适,MQTT 本身就是可以双向通信的,而且还帮你处理了分包,消息分类,加密等等功能。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2708 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 15:05 PVG 23:05 LAX 07:05 JFK 10:05
    Do have faith in what you're doing.
    ubao msn 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