MQTT vs webSocket协议

46 篇文章 4 订阅
16 篇文章 0 订阅

边缘服务器采用了容器和微服务架构,其中重要的一个方面就是要选择一个高效率的消息系统,用于微服务之间的消息交换。

为什么选择websocket 协议

 modular-2 edge 设计了自己的消息系统base service ,它采纳了websocket协议。为什么选择websocket? 主要是基于如下考虑:

在一个边缘设备中,消息系统需要解决两方面的通信:

  1. app 和web 网页之间的双向通信
  2. app 和base service 之间的双向通信

websocket是建立在tcp 协议上的,由http 协议通过升级方式建立websocket。所有一般说来,websocket 的传输效率肯定没有tcp 高。

  但是,在边缘设备中,用户界面是通过web 网页实现的,在HTML5的控制面板上实时显示数据为了避免不断地polling ,需要一种双向通信协议,在web 服务器中比较多的是采用socket.io,而socket.io 正是基于websocket的 .

,baseservice 统一采用了websocket 作为消息系统的协议.

为什么不用MQTT?

同事向我提议”为什么又不采用MQTT协议呢?”,我也知道许多的边缘设备采纳MQTT作为消息总线.而且云端应用中也使用基于pub/sub 的消息系统.毕竟采纳现成的系统会可靠一点。网络上对MQTT的处理能力也大势宣传。

于是,我花了一段时间测试了基于MQTT 消息系统的微服务通信。

IO 模块(我们称为microserver) 上使用的paho MQTT embedded C client。MQTT 代理使用mosquitto 。App 采用C++ paho MQTT client 代码。

测试的结果表明 MQTT 对于短小,低速的IOT 消息交换是可行的,但是如果是高速的大数据流,MQTT 的传输速度不快,我测试的结果是网络传输速率大约2 Mbps 左右.而且mosquitto 占用CPU 的时间也比较大.

也许MQTT代理 对于巨量客户端的消息交换又不俗的表现,但是对于少量,实时高速数据而言,好像没那么好.

想想也是,MQTT 可以在websocket 上传输,实际上如果在web 网页中使用MQTT 的话,必需使用MQTT over websocket 方式(9100端口)。这时,MQTT和websocket 的关系就好比苹果和篮子的关系了。

二进制编码的UDP 效率最高

在baseservice 开发的早期,IO模块采用了UDP 协议,那是传输效率最高的.后来由于基于二进制编码的UDP 通信编程容易出错.我们放弃了.如果需要的化,还可以回到UDP.

疑问

kafka 这样的消息系统在小型边缘设备中的表现会是什么样的呢?

网络上,有老外说,MQTT 最好,不到万不得已,不要使用websocket ,但是许多事情需要自己实验了,才指定是否合适.当然不同场景,也各有不同.对于低速iot 而言,MQTT 是好的选择.

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MQTT是一种轻量级、灵活、可靠的信息传输协议,适用于物联网应用。MQTT协议通过发布-订阅模式进行通信,客户端可以订阅一个或多个主题,服务器会将消息推送给相关订阅者。 Websocket是一种浏览器与服务器之间的通信协议,它在建立连接后,可以实现全双工的通信,允许服务器主动向客户端推送消息。 MQTTnet是基于MQTT协议的一个.NET平台下的开源实现。它提供了丰富的API和高度可配置的功能,使开发人员能够在.NET平台上轻松地使用MQTT协议进行物联网应用的开发。MQTTnet支持MQTT 3.1协议规范,并且具有连接验证、消息保持、最后遗嘱消息等高级特性,以确保可靠的通信。 MQTTnet也支持使用Websocket进行通信。通过使用Websocket,可以让MQTTnet在Web浏览器中运行,实现从Web浏览器到服务器之间的实时双向通信。通过Websocket,我们可以在网页上订阅一个或多个主题,并能够接收服务器端实时推送的消息。 使用MQTTnet的Websocket功能,可以方便地将物联网应用部署到Web浏览器上,并实现设备与浏览器之间的实时通信。这对于一些需要实时监控、远程控制等应用非常有用。同时,MQTTnet提供了丰富的安全机制,可以使用TLS/SSL进行加密通信,保障通信的安全性。 总的来说,MQTTnet通过提供WebSocket支持,使得开发人员能够在.NET平台下便捷地使用MQTT协议,实现物联网应用在浏览器上的实时双向通信,具有很大的灵活性和可靠性。 ### 回答2: MQTTnet是一个开源的MQTT客户端库,它提供了许多实用的功能和工具,用于在应用程序中使用MQTT协议进行通信。而WebSocket是一种在Web浏览器和服务器之间进行双向通信的协议MQTTnet的WebSocket扩展功能允许我们使用基于WebsocketMQTT协议进行通信。这意味着我们可以在Web浏览器中直接使用MQTT进行实时通信,无需任何其他的插件或扩展。 通过使用MQTTnet提供的WebSocket扩展,我们可以使用JavaScript或其他支持WebSocket的编程语言来编写客户端代码,与MQTT代理进行通信。这使得我们可以在浏览器中实时接收和发送消息,实现实时通知、推送等功能。 要使用MQTTnet的WebSocket功能,首先需要确保我们的MQTT代理支持WebSocket协议。然后,我们需要在客户端代码中引入MQTTnet的WebSocket库,并使用WebSocket连接字符串来连接到MQTT代理。 一旦连接建立,我们就可以使用MQTTnet的各种方法和事件处理程序来发送和接收消息,订阅主题等。通过WebSocket,我们可以将MQTT消息以JSON格式发送和接收,从而在Web浏览器中进行实时数据传输。 总而言之,MQTTnet WebSocket提供了一种方便快捷的方式,使得我们可以在Web浏览器中使用MQTT协议进行实时通信。它大大简化了在浏览器中使用MQTT的过程,使得我们可以更加轻松地构建实时通知、推送等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值