首页 > 编程知识 正文

mqtt和xmpp哪个好,mqtt socket

时间:2023-05-05 16:22:39 阅读:156694 作者:4065

1、Mosquito配置文件Mosquito是一种实现MQTT v3.1的开源消息代理软件,由MQTT协议的创始人之一Andy Stanford-Clark开发,重量轻,公开

2、mosquitosubscriptiontreemosquitto通过subscriptiontree管理所有topic和客户端的订阅关系。 首先,将所有topic分割/组织为1个树结构,从根节点到树内的各节点构成与该节点相对应的1个topic,各topic保存订阅的列表。 此列表包含当前topic的所有客户端信息

例如,以下是订阅关系:

客户端a1、a2、a3订阅了topic:A1/B1/C1

客户端b1、b2订阅了topic:A2/B2/C2

客户端c1、c2订阅了topic:A1/B1/C3

客户端d1订阅了topic:A2/B3

2.1、Mosquito业务子树和系谱子树Mosquitto程序根据topic消息的性质将订阅树分为业务子树和系谱子树两个子树; mosquitto程序将topic分为两种类型进行处理。 系统topic和业务topic主要用于发布和维护mosquitto内部的系统消息,后者的topic是用户订阅的业务topic。 这种差异主要归因于以下三点:

生存周期不同。 无论是否存在用户订阅,系统topic都存在于订阅树中,但业务topic必须存在客户端订阅。 除非消息字段retain设置为1。 制作方法不同。 系统topic是在消息发布时创建的,而业务topic可以在订阅或消息发布时创建。 在这种情况下,必须将消息的retain字段设置为1。 消息的保存方法不同。 发布到系统topic的所有消息都将被保存,业务消息直接存储在订阅列表中每个上下文的消息队列中。 如果未连接到订阅,或者未设置retain字段,则不会保存消息。 2.2、Mosquito消息发送过程主要通过递归遍历订阅树来完成。 具体来说,递归遍历订阅树,找到指定的订阅列表,在订阅列表内的各contextg的消息队列中挂上消息。 如果消息的retain字段被设置为1,则mosquitto必须保存此消息,并允许新预订的客户端立即接收上次发送的消息

2.3、Mosquitosubscriptiontree的优缺点Mosquito程序采用subscriptiontree形式维护客户端之间的订阅和发布消息:

优点:逻辑清晰,易于开发和维护。

缺点:横移过程效率低。 另一方面,该程序有许多遍历订阅树的过程,例如订阅、发布消息和取消订阅,随着客户端数量的增加,此功能对效率的影响更为明显。

因此,在mosquito的实际应用中很难支持5万以上的客户端的断开连接重练习操作非常频繁,尤其是在客户端网络状况不佳的情况下,这会导致对订阅树的大量遍历操作,并严重影响mosquitto的效率。

2.4.mosquito的消息接发机制是一种I/O多路传输(I/O multiplexing )技术。 该技术首先构建描述符表,然后调用函数,当这些描述符之一知道I/O准备好时,函数返回,函数返回后再告诉流程描述符准备好,其工作过程如下

首先创建pollfd结构的数组,为每个数组元素指定描述符编号和感兴趣的状态。 为需要监听状态的每个设备描述符创建一个pollfd结构,并将其放入pollfd结构数组中。 调用函数poll以监视pollfd结构数组中每个结构的状态。 2.5、mosquito的ping/担心的日记功能mosquito将keepalive*1.5小时作为判断客户端连接是否异常断开的时间界限,其中keepalive的值对mosquito的性能影响较大,该值较大如果此值太小,则不仅会浪费网络带宽,而且客户端和服务器之间的tcp连接上的服务器可能会异常重新启动,从而导致服务器错误地判断为tcp连接已断开。 这个值需要通过分析实际情况来确定。

3359 blog.csdn.net/houjixin/article/details/21463965? UTM _ medium=distribute.PC _ relevant.none-task-blog-blogcommendfrommachinelearnpai2-3. nonecasedepth _1- 1

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。