This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 需要增加发布和订阅主题的编号

Guru**** 2782615 points

Other Parts Discussed in Thread: CC3200, CC3200SDK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/587922/need-to-increase-no-of-topic-for-publish-and-subscribe

Thread 中讨论的其他器件:CC3200CC3200SDK

你(们)好

我正在处理基于 CC3200 MQTT 的项目。在这里、我想增加发布和订阅主题的数量。

目前、我使用 的是 CC3200SDK_1.2.0

您能不能告诉我 、为了增加"发布"和"订阅我的应用程序"的主题数量、我必须做哪些更改。此外、最大数量是多少 发布和订阅都可以增加主题数量?

此致、

Shashank  

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Shashankk、

    更新 topic_count 的值是否不够?

    亚伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aaron、

    我必须使用5个主题进行订阅和发布。但在 MQTT 库中、最多只能订阅4个主题。以下更改我已将订阅主题增加到5个-

    /*定义主题数*/
    #define TOPIC_COUNT 5.

    /*定义订阅主题值*/
    #define TOPIC1" setData"
    #define topic2"获取数据"
    #define TOPIC3"传感器"
    #define TOPIC4"有效"
    #define TOPIC5"未验证数据"

    /*连接配置*/
    connect_config usr_connect_config[]=




    SL_MQTT_NETCONN_URL、
    服务器地址、
    PORT_NUMBER、
    0、
    0、
    0、
    null
    }、
    服务器模式、
    对、
    }、
    null、
    "用户1"、
    null、
    null、
    对、
    keep_alive_timer、
    {MQTT_Recv、SL_MqttEvt、SL_MqttDisconnect}、
    Topic_count、
    {TOPIC1、topic2、TOPIC3、TOPIC4、TOPIC5}、
    {QOS2、QOS2、QOS2、QOS2、QOS2}、
    {will _topic、will _MSG、will _QoS、will _retain}、
    错误

    };

    在 MQTT Recv 事件中、我还为主题4和主题5添加了-

    否则 if (strncmp (output_str、TOPIC4、top_len)=0)

    TogleLedState (LED2);
    TogleLedState (LED3);

    否则 if (strncmp (output_str、TOPIC5、top_len)=0)

    TogleLedState (LED3);
    TogleLedState (LED1);

    但它不起作用。 除此之外,我是否要作出任何改变?

    此致、
    Shashank

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shashankk、

    订阅 API [1]支持最多4个主题的订阅“经皮”, 您应该能够多次调用订阅 API,传递不同主题,“每个”调用最多4个主题。

    下面是一些多次订阅的伪代码(无错误检查等):-

    对于(loop = 0;loop < 10;loop++){
    字符子主题[30];
    char * subtopics[1]={subtopic};
    unsigned char subqosvals[1]={QOS2};
    
    sprintf (subtopic、"/subtest/subtopic_%d "、loop);
    
    sl_ExtLib_MqttClientSub (clientCtx、子主题、subqosvals、1);
    } 

    希望这有所帮助、

    ~Roger

    [1] [使用 SDK v.1.3.0中的 CC3200 MQTT 库(v.1.4.0)]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Roger、

    我应该在哪里称呼它? 或者他们的任何其他选项是否存在、我可以直接增加主题数。我也在 sl_MQTT_client.c 中进行了更改  

    /* sl_ExtLib_MqttClientSub */

    _i32
    sl_ExtLib_MqttClientSub (void *cli_ctx、char*_const *主题、
    _u8 * qos_level、_i32计数)

    #define MAX_MOUSE_SUB_TOCESS_5.

    _i32 ret =-1、i;

    struct utf8_strqos qos_topics[MAX_MOUSE_SUB_topics];
    struct sl_client_ctx * client_ctx =(struct sl_client_ctx *) cli_ctx;

    if (count > MAX_MOUSE_SUB_TOTOCES){
    转至 MQTT_SUB_exit1;//客户端未连接*/

    对于(i = 0;i < count;i++){
    QoS_topics[i].buffer = topics[i];
    QoS_topics[i].qosreq = QOS[QOS_LEVEL[i];
    QoS_topics[i].length = strlen (topics[i]);

    mt_lock_take ();

    if (MQTT_DISCONNECT = client_ctx->等待的_ack)
    转至 MQTT_SUB_exit2;

    /*发送订阅 MQTT 消息*/
    RET = MQTT_SUB_msg_send (client_ctx->cli_hndl、qos_topics、count);
    if (ret < 0){
    转至 MQTT_SUB_exit2;

    if (true =client_ctx->blocking_send){
    client_ctx->suback_qos =(char*) qos_level;
    client_ctx->等待的_ack = MQTT_SUBACK;
    mt_ive_ack_wait_mt_to_rc (client_ctx、ret);

    MQTT_SUB_exit2:
    mt_lock_ent();

    MQTT_SUB_exit1:
    返回(RET < 0)? -1:0;

    此致、

    Shashank

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shashankk、

    您无需修改 MQTT 库代码。  根据我之前的示例、最简单的方法是针对您要订阅的每个主题多次调用订阅 API。

    ~Roger

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好

    我有相反的需要、我不想订阅任何主题、我只想发布。
    是否可以完成此操作、或者我必须至少使用虚拟主题?

    此致、Juan