tj_libo 2023-04-04 12:09 采纳率: 0%
浏览 7

请教一个MQTTNET的服务端推送问题

MQTTNET 3.1.2版本,项目引用后 创建MQTT服务,接收消息等都正常,只有推送的时候,推送内容不止是客户端接收到,服务端自己也接收到。很奇怪。

 /// <summary>
        /// 发布消息
        /// </summary>
        public async static void ServerPublishMqttTopic(string topic, string payload)
        {
            try
            {
                var message = new MqttApplicationMessage()
                {
                    Topic = topic,
                    Payload = Encoding.UTF8.GetBytes(payload),
                    QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce,
                    Retain = false,
                };
                await mqttServer.PublishAsync(message);
            }
            catch (Exception ex)
            {
                TxtWrite.WriteTxt("[" + DateTime.Now + "]发布消息失败!");
            }
        }

 

发送消息调用ServerPublishMqttTopic("xxx","0");

结果在服务端mqttServer.ApplicationMessageReceivedHandler的事件中,也接收到了“0”;自己推送自己接收了?

请问这个怎么解决啊??

  • 写回答

2条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-04-04 12:48
    关注

    该回答引用ChatGPT-3.5

    根据你提供的代码,可以看出是在服务端向指定的主题发布消息,如果服务端自己也接收到了这个消息,那么可能是服务端也订阅了这个主题。


    可以检查一下服务端是否订阅了这个主题,如果是的话,可以在发布消息之前取消服务端对该主题的订阅,避免服务端自己接收到该消息。


    可以尝试在服务端代码中使用以下方法取消订阅:

    await mqttServer.UnsubscribeAsync(topic);
    

    其中,topic 是服务端订阅的主题名称。


    如果服务端确实不需要订阅该主题,可以检查服务端代码中是否在启动 MQTT 服务时,意外地订阅了该主题。可以检查以下代码,看是否存在订阅操作:

    await mqttServer.SubscribeAsync(new TopicFilterBuilder().WithTopic(topic).Build());
    

    如果有,可以将其注释或者删除,避免服务端订阅该主题。


    希望以上解决方案可以帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月4日

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)