网站建设 目的,wordpress免费模板小而美,fusion app,西北旅游攻略为进一步实现一个简易的MQTT服务端#xff0c;做如下服务端数据结构设计。
1、服务端协议相关的函数 连接 rx_connect() 接收连接请求 Socket中监听#xff0c;通过第一个字节switch#xff0c;根据数据创建client对象 tx_connectack() 回复连接响应 处理完成rx_conn…为进一步实现一个简易的MQTT服务端做如下服务端数据结构设计。
1、服务端协议相关的函数 连接 rx_connect() 接收连接请求 Socket中监听通过第一个字节switch根据数据创建client对象 tx_connectack() 回复连接响应 处理完成rx_connect后自动处理。 发布 Qos0 rx_publish() Qos0 接收发布数据 Qos0 Socket中监听通过第一个字节switch根据Topic查找client分发message。 发布 Qos1 rx_publish() Qos1 接收发布数据 Qos1 Socket中监听通过第一个字节switch根据Topic查找client分发message。 tx_puback() 回复发布响应 处理完成rx_publish()后自动处理。 发布 Qos2 rx_publish() Qos2 接收发布数据 Qos2 Socket中监听通过第一个字节switch根据Topic查找client分发message并且标记状态。 tx_pubrec() 回复发布响应1 处理完成rx_publish()后自动处理。 rx_pubrel() 接收pubrel数据 Socket中监听通过第一个字节switch根据Topic查找client标记message。 tx_pubcomp() 回复发布响应2 处理完成rx_pubrel()后自动处理。 订阅 rx_subscribe() 接收订阅数据 Socket中监听通过第一个字节switch根据Topic查找Topics列表将该client添加至topic中。 tx_suback() 回复订阅响应 处理完成rx_suback()后自动处理。 取消订阅 rx_unsubscribe() 接收取消订阅数据 Socket中监听通过第一个字节switch根据Topic查找Topics列表将该client从topic中删除。 tx_unsuback() 回复取消订阅响应 处理完成rx_unsuback()后自动处理。 心跳 rx_pingreq() 接收心跳数据 Socket中监听通过第一个字节switch根据TCP/IP查找client更新pingtime。 tx_pingresp() 回复心跳响应 处理完成rx_pingreq()后自动处理。 断开连接 rx_disconnect 接收断开连接数据 Socket中监听通过第一个字节switch根据TCP/IP查找client将该client从clients中删除。并且将topics中的该client一并删除。
2、服务端数据结构 列表Clients{ Connect; TCP/IP; Messages; Subscribes; Next_client;} Client对象列表clinet属性有连接、TCP/IP、未处理完成的消息、未处理完成的订阅指向下一个clinet的指针。 Connect{ Protocolname; protocolLevel; Connectflage; Keepalive; Clientid; Willtopic; Willmessage; Username; Password connectflage;} 其中 Connectflage{ Bit Usernameflag; Bit Passwordflag; Bit Willretain; Bit Willqos; Bit Willflag; Bit Cleansession; Bit Reserved; } 每个client对象都有一个连接结构体记录该client的连接参数。 TCP/IP{ IPaddr; Port; Pingtime;} Client对象使用的传输物理实现。 列表Messages{ Dup; Qos; Retain; M_uuid; Messagedata; Messageflag; Next_message;} 其中 Messageflag; Qos0: 0-pub; Qos1: 0-pub,1-ack Qos2: 0-pub,1-ack,2-rel,3-comp Client对象未处理完成的消息。 列表Subscribes{ Topicfilter; S_uuid; Subscribeflag; Next_subscribe;} 其中 Subscribeflag; 0-tx,1-ack Client对象的订阅。 列表topics{ Topicname; Topic; Nexttopic;} 其中topic{ Client; Nextclient; } topics列表中存放了所有的topic每个topic中存放了所有订阅该topic的client。