老铁们,大家好,相信还有很多朋友对于mqtt服务器有哪些和mqtt服务器用哪一个好的相关问题不太懂,没关系,今天就由我来为大家分享分享mqtt服务器有哪些以及mqtt服务器用哪一个好的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

一、j*a mqtt

j*a mqtt是什么,让我们一起了解一下?

MQTT是一个基于客户端-服务器的消息发布或订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,如果工作在TCP或IP协议上,是为硬件*能低下的远程设备以及网络状况糟糕的情况下而设计的发布或订阅型的消息协议。

MQTT主要应用在哪些场合?

1、它是一种机器之间通讯 machine-to-machine(M2M)、物联网 Inter of Things(IoT)常用的一种轻量级消息传输协议。

2、适用于网络带宽较低的场合。

3、包含发布、订阅模式,通过一个代理服务器(broker),任何一个客户端(client)都可以订阅或者发布某个主题的消息,然后订阅了该主题的客户端则会收到该消息。

实战操作:模拟客户端接收消息。 import j*a.util.concurrent.ScheduledExecutorService; import .eclipse.paho.client.mqttv3.MqttClient; import .eclipse.paho.client.mqttv3.MqttConnectOptions; import .eclipse.paho.client.mqttv3.MqttTopic; import .eclipse.paho.client.mqttv3.persist.MemoryPersistence; /** * 模拟一个客户端接收消息 * * @author Unclue_liu */ public class ClientMQTT {     public static final String HOST = "tcp://192.168.1.77:1883";    public static final String TOPIC1 = "pos_message_all";    private static final String clientid = "12345678";    private MqttClient client;    private MqttConnectOptions options;    private String userName = "mqtt";    //非必须    private String passWord = "mqtt";  //非必须    private ScheduledExecutorService scheduler;     private void start() {        try {            // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存            client = new MqttClient(HOST, clientid, new MemoryPersistence());            // MQTT的连接设置            options = new MqttConnectOptions();            // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接            options.setCleanSession(false);            // 设置连接的用户名            options.setUserName(userName);            // 设置连接的密码            options.setPassword(passWord.toCharArray());            // 设置超时时间 单位为秒            options.setConnectionTimeout(10);            // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制            options.setKeepAliveInterval(20);            //设置断开后重新连接            options.setAutomaticReconnect(true);            // 设置回调            client.setCallback(new PushCallback());            MqttTopic topic = client.getTopic(TOPIC1);            //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息            //遗嘱            options.setWill(topic, "close".getBytes(), 1, true);            client.connect(options);            //订阅消息            int[] Qos = {1};//0:最多一次 、1:最少一次 、2:只有一次            String[] topic1 = {TOPIC1};            client.subscribe(topic1, Qos);         } catch (Exception e) {            e.printStackTrace();        }    }     public static void main(String[] args)  {        ClientMQTT client = new ClientMQTT();        client.start();     }

二、一文了解主流在线公共 MQTT 服务器

很多 MQTT项目和物联网服务都提供了在线的公共 MQTT服务器,用户可以利用其进行 MQTT学习、测试、原型制作甚至是小规模使用,而无需再自行部署,方便快捷,节省时间与精力成本。

但因为地理位置、网络环境以及服务器负载不同,每个公共服务器的稳定*以及消息传输时延也不尽相同。尽管几乎所有服务提供方都*不对其免费服务的稳定*和安全*负责,但用户在使用时却需要考虑这些因素。

为此,本文整理了一些较为热门的免费在线 MQTT服务器,通过可访问*、网络延时、小规模*能测试以及消息实际传输延时等几个层面进行评估对比,希望可以为您的选择提供参考。

本文选取了以下几个热门的在线公共 MQTT服务器:

EMQX

免费在线的 MQTT 5服务器,由 EMQX Cloud提供。为优化国内用户访问速度,分别提供了海外跟国内两个接入点,其中 EMQX部署在 AWS美国俄勒冈区域,EMQX(国内)部署在腾讯云上海区域,国内访问有稳定的网络通道。

两个接入点均为 2个节点组成的 EMQX集群,后期根据实际接入量和负载可以自动扩容更多节点。根据后台显示,该服务器基于 EMQX企业版 4.2.6版本,当前运行时长为 128天。

详细介绍请访问 EMQ官网页面:免费的在线 MQTT 5服务器。

注:EMQX与 EMQX(国内)两个接入点数据不互通。

Eclipse

由 Eclipse IoT提供的免费在线 MQTT服务器,解析到的 IP显示其部署在 Azure美国弗吉尼亚区域。值得一提的是此前该服务器的接入一直都是mqtt.eclipse.,不知因何故更换到现在的接入,撰写本文时我使用旧接入失败一度以为服务器已经停了,最后通过 HTTP访问原接入点时才发现已经做了 301永久重定向。

根据$SYS/#系统主题查询得出该服务器基于 Mosquitto 2.0.12版本,当前运行时长为 71227秒,疑似在一天前重启过服务。

相关介绍: mqtt.eclipseprojects.io...

Mosquitto

由 Mosquitto社区提供的免费在线 MQTT服务器,解析到的 IP显示其部署在 OVH法国鲁贝区域。在测试中发现正常情况下该接入点网络延时较高,所幸丢包率比较低,某些时段会出现连接失败的情况。

根据$SYS/#系统主题查询得出该服务器基于 Mosquitto 2.0.12版本,当前运行时长为 28519秒,疑似在一天内重启过服务。

相关介绍: test.mosquitto./

HiveMQ

由 HiveMQ提供的免费在线 MQTT服务器,解析到的 IP显示其部署在 AWS德国法兰克福区域。

由于其$SYS/#系统主题无法订阅,无法获知提供服务的 Broker类型、具体版本以及当前运行时长。

相关介绍: mqtt-dashboard./

注:受限于地理位置不同,不同地方的网络环境会有一定差异,导致本文测试结果可能会有所差异。

该环节中使用 MQTT客户端工具- MQTT X进行可访问*测试,尝试通过 TCP 1883端口建立连接,经过反复测试只有 Eclipse提供的免费服务无法访问,总体结果如下:

MQTT X具备连接导入导出功能,以下是本文测试使用的连接数据,可以通过数据恢复的方式导入 MQTT X中。

通过网络访问检测网络连通情况和网络延时,由于部分服务禁用了 ICMP协议,同时各个地方的网络情况不一样,此处使用 WebSocket,借助国内热门的测速工具站长工具的 HTTP测速进行测试:

借助开源 MQTT*能测试工具 emqtt-bench进行测试,测试客户端的 Pub Sub是否有速率限制。

出于实用*的考虑,本轮测试并非是探究每个接入点的速率上限,而是考量每个接入点能够满足常规的使用强度。本轮设计的场景是测试单客户端 Sub/Pub消息为 1000 msg/s持续 1分钟,消息大小为 256 Bytes,记录每个接入点是否达标、是否有限速,下图为测试架构:

准备好 emqtt-bench之后,以下每组 Sub Pub命令各自在不同的窗口执行即可:

目的:考量消息从 Pub端到 Sub端所需要的时间,采样分析传输稳定*与平均耗时。

测试步骤:客户端连接到公共服务器,每 5秒钟发布一条带时间戳的消息,订阅者接收到消息之后去当前时间戳减去消息中的时间戳,计算得出消息时延记录至数据库,统计 30分钟后进行采样分析。

测试模型如下:

测试代码: free-online-public-broker-test.js

在几项测试中各个免费在线 MQTT服务器整体上均达到了可用的程度,但是细分到具体指标上各个服务器之间还是存在*的差异。较低的速率限制、不稳定的网络延时,甚至有部分服务器疑似存在定时重启机制,这些稳定*和可用*层面的问题即使在简单测试和原型制作中也会给用户带来不好的体验。

以上内容也从一定程度佐证了物联网平台的相关*能受设备地理位置的影响程度。因此在海外与国内基于优质云服务商网络分别提供就近接入点的 EMQX免费在线 MQTT服务相比之下就具有了一定优势,各方面测试数据均较为领先。

我们也很高兴地看到越来越多来自全球各地的物联网设备接入到 EMQX提供的在线 MQTT服务器上,平均每秒就有数千条消息传递。broker.emqx.io:1883也出现在 GitHub的各类开源项目、示例代码( github./search?...)中。国内的用户则可以选择专为国内优化部署的 broker-.emqx.io节点。

EMQX在线公共服务器在国内和海外的两个接入点服务均由 EMQX Cloud提供。EMQX Cloud是 EMQ提供的全托管云原生 MQTT消息服务,支持商业级的可访问*和稳定*保障。对于商业用户来说,使用 EMQX Cloud可零成本快速启动项目,以简单快速的方式实现 MQTT设备接入。后期可随业务发展情况按需扩展,同时可在全球范围内就近创建接入点并享受 EMQ专业团队提供的 7*24技术支持保障。

无论是个人还是企业项目,EMQ致力于为各类用户提供最合适的 MQTT消息服务。在使用 EMQX的过程中如有任何意见或问题,欢迎随时向我们的团队反馈。

三、mqtt服务器用哪一个好

好的MQTT服务器推荐:VerneMQ、HiveMQ和Mosquitto。

以下是关于这三个MQTT服务器的详细介绍:

mqtt服务器有哪些 mqtt服务器用哪一个好

VerneMQ

VerneMQ是一个可扩展且功能丰富的MQTT服务器,适用于各种规模的项目。它支持多种插件,可以帮助企业轻松集成不同的应用和服务。VerneMQ具有良好的可靠*和安全*,提供了消息认证和授权功能,确保数据传输的安全*。此外,它还提供了高级集群功能和监控工具,便于管理和维护。

HiveMQ

HiveMQ是一个高度可配置的MQTT服务器,适用于各种物联网场景。它提供了丰富的API和插件生态系统,支持多种语言和框架的集成。HiveMQ在*能和可扩展*方面表现出色,能够满足大规模部署的需求。此外,它还提供了强大的安全*和审计功能,确保数据的完整*和安全*。

Mosquitto

Mosquitto是一个轻量级的MQTT服务器,适用于小型到中型项目。它易于安装和配置,适合初学者使用。尽管它的功能相对简洁,但Mosquitto在*能和稳定*方面表现出色。它支持多种身份验证和加密协议,确保数据传输的安全*。此外,它还提供了基本的监控和日志功能,方便用户进行故障排除和管理。

总的来说,选择MQTT服务器时需要考虑项目的需求、规模和预算。VerneMQ、HiveMQ和Mosquitto都是优秀的MQTT服务器,但在功能、*能和可扩展*方面有所不同。建议根据具体需求进行选择。