amazon-web-services - 订阅者的数量是否会影响 MQTT 中的接收时间?
问题描述
我想知道特定主题的订阅者数量是否会导致每个订阅者接收消息的延迟?
如果是,是与代理的实现有关还是与 MQTT 的性质有关?
我在各种经纪人的文档中找不到任何东西,或者我找不到合适的词来搜索。
scenario 1 :
topic1
publisher --> broker --> 1 subscriber
scenario 2 :
topic1
publisher --> broker --> 2 or more subscribers
场景 1 中的订阅者接收消息会比场景 2 更快吗?
还是每个订阅者同时收到消息?
解决方案
这主要取决于经纪人是如何实施的,但其他因素也会产生影响。
对于大多数代理来说,传递特定消息的处理可能是单线程的,并遵循以下步骤:
- Broker 从发布客户端接收发布数据包
- 在接收消息的线程上,它开始搜索已连接客户端的订阅主题模式列表
- 找到匹配项后,它将向该客户端发送发布数据包并继续下一个。
使用精心设计的订阅主题树结构,搜索时间不应该根据订阅客户端的数量而改变,而只是匹配模式的数量(重叠通配符)。但是发送到匹配的客户端将是线性的。
另一个因素是消息的大小和每个客户端的网络速度。
您可能可以在单个代理中并行化其中的一些,但这仍然会在网络接口或分布式代理上出现瓶颈(但这会增加将原始消息推送到其他节点的开销)
推荐阅读
- dask - 在 Dask.distributed 中使用 client.scatter(df) 时引发异常
- java - 返回二维数组Java上元素的索引
- c - 循环中的 Scanf("%*s") 验证。它究竟是如何工作的?
- laravel - Laravel 测试:模型工厂不触发注册事件
- python - 在 csv 文件中跳过所需数据上方和下方的行
- c# - AuthenticationOptions 的 AutomaticAuthenticate 属性含义
- java - Java布尔方法,for循环不返回正确的true或false
- javascript - Jqgrid pager(顶部或底部)太多自定义按钮然后溢出图片和文字,如何解决?
- python-3.x - 在 datatables python 中,R Data.Table 中使用的 DT[grepl("Ap",V2)] 的等价物是什么?
- apache-kafka - 让持久状态存储处理过期