V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
unt
V2EX  ›  程序员

公司准备研发物联网设备,请教一下大家通信协议选型问题

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

    设备量级:一套服务 20W 左右; 通信方式:4G(优先,主要,占比为 90%),lora,zigbee,485 ;需要共用一套协议格式。

    请问用 mqtt json 好还是 TCP 字节流。

    15 条回复    2023-12-24 02:33:52 +08:00
    ttyUSB0
        1
    ttyUSB0  
       361 天前
    对数据实时性有要求的话建议字节流
    coderxy
        2
    coderxy  
       361 天前
    想求快就 mqtt ,有一定自研能力且后期有定制化改造可能就用 tcp 自己撸
    Takizawa
        3
    Takizawa  
       361 天前 via Android
    首选 mqtt ,tcp 后期升级麻烦
    retanoj
        4
    retanoj  
       361 天前
    mqtt + emqx + 插件
    cwxiaos
        5
    cwxiaos  
       361 天前 via iPhone
    Mqtt 最方便,接入简单,tcp 还是有一定要求的。
    gongquanlin
        6
    gongquanlin  
       361 天前
    mqtt + emqx
    tcp 得处理各种乱七八糟的问题
    unt
        7
    unt  
    OP
       361 天前 via iPhone
    @ttyUSB0 字节流很快吗,我司接入过很多类型的协议,感官上 MQTT 和 TCP 速度一样
    unt
        8
    unt  
    OP
       361 天前 via iPhone
    @coderxy
    @Takizawa
    @retanoj
    @cwxiaos
    @gongquanlin TCP 优势是什么
    ShuWei
        9
    ShuWei  
       361 天前
    mqtt 就是一个定义在 tcp 字节流之上的协议,已经处理好基础定义了,并且开放性很好,如果是一条一条的消息数据类的,推荐使用 mqtt ,其 QoS 机制很可靠,如果是其他特定的比如视频流之类,就建议还是走 tcp 或者 udp 通信了
    joyanhui
        10
    joyanhui  
       361 天前   ❤️ 1
    我们是从 mqtt 换到私有协议的 ,目前是优先 udp 其次 tcp
    现在也兼容 http(GET POST) 以及 ws 。其实就是 tcp 简单弄了一下。

    mqtt 优点就是拿来就用,上线快,尤其是 emqx 简单易用,而且也有云厂商提供 mqtt.

    我们更换的原因是,设备数量多了以后 连接数和 qps 多了以后 mqtt 协议太重 服务器性能和带宽开支太大,集群管理也复杂。

    私有协议 一开始完全抄的 coap ,略微改了一下 , 后来就慢慢升级替换掉了。

    私有协议更轻量 速度和性能 以及定时化肯定是更好的。后期也省心很多。
    unt
        11
    unt  
    OP
       361 天前
    @ShuWei #9
    @joyanhui #10 我们现在纠结的点在于,mqtt 肯定够用, 但是总隐约感觉 tcp 更好
    joyanhui
        12
    joyanhui  
       361 天前   ❤️ 1
    @unt mqtt 现成的轮子,产品上线快。也足够轻量 开放性也好。

    也可以先 mqtt 上线,以后看情况是否要换。我们当时是 mqtt 和私有协议并存了一段时间。

    我是建议一步到位直接私有协议的 但是要看你们的情况啦:是否要必要,是否有能力。

    另外
    1 、关于 json ,不是很建议,尤其是物联网设备还是 4G 终端为主。我们主要是 msgpack ,部分 protobuf 。
    2 、如果私有协议 也没必要死磕 tcp, udp 做一下去重和重发不香吗?


    私有协议简单说几个小优势
    1 、本地处理:一些消息 在自己的 Server 上直接就处理了。mqtt 你要么二次开发现有的 broker 要么自己实现一个 mqtt broker ,否则只能转发给订阅端处理。
    2 、灵活度,
    2.1 加密通讯:mqtt 一般加密都是走 tls 的,私有协议可以直接设备出厂预设 key,然后直接 AES 加密就完了。tls 太重了我们终端硬件资源没那么富裕,总不能 AES over mqtt 。
    2.2 集群的灵活:我们集群的实现很简陋但是非常可靠 ,一个节点负责一部分设备,记录每个终端设备由哪个节点负责。节点和节点也没有通讯开支,随便动态扩充收缩集群规模。现有的 mqtt broker 的集群实现对比起来就太啰嗦。

    私有协议 肯定是最灵活的,性能和速度也肯定是最好的。还是那句话: 必要性和能力
    ShuWei
        13
    ShuWei  
       360 天前
    @unt 纯 tcp 字节流肯定是不行的,要在上面定义应用层协议,mqtt 就是这样的应用层协议,你既然都问出了这个问题,建议就 mqtt 吧,自己定义私有协议,技术能力过硬还可以,技术不到家会适得其反的
    totoro52
        14
    totoro52  
       360 天前
    看场景啊,什么都不说无脑推 mqtt
    unt
        15
    unt  
    OP
       360 天前 via iPhone
    @joyanhui 谢谢,回答得很详细
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:22 · PVG 18:22 · LAX 02:22 · JFK 05:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.