Gmqtt插件机制详解

本文深入探讨了Gmqtt的插件机制,包括session生命周期中的钩子函数,如OnBasicAuth、OnConnected等。介绍了如何利用wrapper模式编写插件,以实现鉴权等控制逻辑。同时,文章提供了插件的加载顺序、配置管理和编写步骤,帮助开发者快速入门Gmqtt插件开发。
摘要由CSDN通过智能技术生成

在上一篇文章中,我们介绍了Gmqtt的基本特性以及钩子函数的基本使用方法。本篇我们来详细介绍Gmqtt的插件机制,以及如何编写插件。

前文回顾Gmqtt——Go语言实现的MQTT broker
项目地址:https://github.com/DrmagicE/gmqtt

session的生命周期

根据MQTT协议规范,每个客户端连接都会有一个与之对应的session,客户端可以指定该session是否需要持久化。对于一个持久化session,即使客户端离线,broker也会为其保留订阅信息以及与其订阅匹配的消息,当客户端重新上线后,broker会把这些消息投递给客户端。这使得在网络频繁闪断的环境下,也不会丢失消息。Gmqtt提供了钩子函数注入到session的生命周期中,使得插件可以管理session生命周期的变化,涉及生命周期的钩子函数有:

  • OnBasicAuth——收到CONNECT报文后调用,用作基本鉴权。
  • OnEnhancedAuth——增强型鉴权(针对V5协议的支持)
  • OnConnected——客户端连接成功
  • OnSessionCreated——客户端新建session成功
  • OnSessionResumed——客户端从session中恢复
  • OnSessionTerminated——session终止
  • OnClosed——客户
    端断开
    下面我们以基本鉴权为例,图解这些钩子函数在整个session生命周期中的位置。

session建立

在这里插入图片描述

session删除

非持久化session会在连接关闭时删除,而对于持久化session,一般会设置一个超时时间,当session超时后,会被删除。

对于V3.1.1协议,客户端通过CONNECT报文的cleanSession字段来控制session是否需要持久化;
而在V5协议中,cleanSession字段更名成为了cleanStart字段,客户端通过设置超时时间来控制期望的session的保留时间。

session的删除过程如下图所示:
在这里插入图片描述

主题订阅/取消订阅流程

主题订阅和取消流程,涉及以下几个钩子函数:

  • OnSubscribe——常用钩子函数之一,当收到SUBSCRIBE报文后触发,可用作权限控制,主题改写等功能。
  • OnSubscribed——当成功订阅一个主题后触发。
  • OnUnsubscribe——当收到UNSUBSCRIBE报文时触发。可用作权限控制,主题改写等功能。
  • OnUnsubscribed——当取消订阅一个主题后触发。

订阅流程

在这里插入图片描述

取消订阅流程

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值