GO之MQTT使用中文文檔

英文文檔:https://godoc.org/github.com/eclipse/paho.mqtt.golang
github: https://github.com/eclipse/paho.mqtt.golang


Constants

const (
    NET component = "[net]     "
    PNG component = "[pinger]  "
    CLI component = "[client]  "
    DEC component = "[decode]  "
    MES component = "[message] "
    STR component = "[store]   "
    MID component = "[msgids]  "
    TST component = "[test]    "
    STA component = "[state]   "
    ERR component = "[error]   "
)

調(diào)試輸出的組件名稱(chēng)

Variables

var ErrInvalidQos = errors.New("Invalid QoS")

ErrInvalidQos是當(dāng)發(fā)送一個(gè)包的Qos值無(wú)效時(shí)返回的錯(cuò)誤

var ErrInvalidTopicEmptyString = errors.New("Invalid Topic; empty string")

ErrInvalidTopicEmptyString是傳遞長(zhǎng)度為0的主題字符串時(shí)返回的錯(cuò)誤

var ErrInvalidTopicMultilevel = errors.New("Invalid Topic; multi-level wildcard must be last level")

ErrInvalidTopicMultilevel是傳遞主題字符串時(shí)返回的錯(cuò)誤谎势,該字符串除最后一個(gè)位置外的任何位置都有多級(jí)通配符

var ErrNotConnected = errors.New("Not Connected")

ErrNotConnected是在客戶機(jī)未連接到代理時(shí)執(zhí)行的函數(shù)調(diào)用返回的錯(cuò)誤

func DefaultConnectionLostHandler

func DefaultConnectionLostHandler(client Client, reason error)

DefaultConnectionLostHandler是一個(gè)函數(shù)的定義骇陈,它只是向調(diào)試日志報(bào)告客戶機(jī)丟失連接的原因蝌箍。

type Client

    // 判斷是否連接成功
    IsConnected() bool

    // 判斷是否與代理處于連接狀態(tài)
    IsConnectionOpen() bool

    // 創(chuàng)建一個(gè)連接到消息代理宪肖,如果失敗,默認(rèn)會(huì)重連x次
    Connect() Token

    // 等待指定的毫秒數(shù)以及等待現(xiàn)有工作完成之后脐区,斷開(kāi)連接
    Disconnect(quiesce uint)

    // 發(fā)布一個(gè)帶特定Qos標(biāo)識(shí)和內(nèi)容的消息給一個(gè)特定topic夺溢,返回一個(gè)Token用于跟蹤消息傳遞到代理的情況
    Publish(topic string, qos byte, retained bool, payload interface{}) Token

    // 訂閱一個(gè)主題,當(dāng)這個(gè)主題有消息時(shí)抢蚀,執(zhí)行消息處理函數(shù),如果為nil則進(jìn)行默認(rèn)處理
    Subscribe(topic string, qos byte, callback MessageHandler) Token

    // 可訂閱多個(gè)主題镰禾,當(dāng)其中一個(gè)主題來(lái)消息時(shí)皿曲,執(zhí)行消息處理函數(shù)唱逢,如果為空則進(jìn)行默認(rèn)處理
    SubscribeMultiple(filters map[string] byte, callback MessageHandler) Token

    // 取消訂閱將會(huì)結(jié)束接收從別的client發(fā)行過(guò)來(lái)的消息
    Unsubscribe(topics ...string) Token

    // 允許為一個(gè)沒(méi)有訂閱的topic添加一個(gè)消息處理函數(shù)
    AddRoute(topic string, callback MessageHandler)

    // 返回一個(gè)正在使用的client端的選項(xiàng)
    OptionsReader() ClientOptionsReader
}

客戶端是這個(gè)庫(kù)使用的客戶端的接口定義,該接口主要用于允許模擬測(cè)試屋休。應(yīng)用程序可以使用以下方法連接到MQTT服務(wù)器:

A plain TCP socket
A secure SSL/TLS socket
A websocket

要在MQTT規(guī)范中描述的服務(wù)質(zhì)量級(jí)別上確保消息交付坞古,必須使用消息持久性機(jī)制。這是通過(guò)提供一個(gè)實(shí)現(xiàn)Store接口的類(lèi)型來(lái)實(shí)現(xiàn)的劫樟。為了方便起見(jiàn)痪枫,F(xiàn)ileStore和MemoryStore提供的實(shí)現(xiàn)應(yīng)該足以滿足大多數(shù)用例。更多信息可以在他們各自的文檔中找到叠艳∧坛拢可以通過(guò)配置a然后提供ClientOptions類(lèi)型來(lái)指定許多連接選項(xiàng)。

func NewClient

func NewClient(o *ClientOptions) Client

NewClient將使用提供的ClientOptions中指定的所有選項(xiàng)創(chuàng)建MQTT客戶端附较〕粤#客戶端必須在使用Connect方法之前調(diào)用該方法。這是為了確保在應(yīng)用程序?qū)嶋H準(zhǔn)備好之前創(chuàng)建資源(比如網(wǎng)絡(luò)連接)拒课。

type ClientOptions

type ClientOptions struct {
    Servers             []*url.URL
    ClientID            string
    Username            string
    Password            string
    CredentialsProvider CredentialsProvider
    CleanSession        bool
    Order               bool
    WillEnabled         bool
    WillTopic           string
    WillPayload         []byte
    WillQos             byte
    WillRetained        bool
    ProtocolVersion     uint

    TLSConfig             *tls.Config
    KeepAlive             int64
    PingTimeout           time.Duration
    ConnectTimeout        time.Duration
    MaxReconnectInterval  time.Duration
    AutoReconnect         bool
    Store                 Store
    DefaultPublishHandler MessageHandler
    OnConnect             OnConnectHandler
    OnConnectionLost      ConnectionLostHandler
    WriteTimeout          time.Duration
    MessageChannelDepth   uint
    ResumeSubs            bool
    HTTPHeaders           http.Header
    // contains filtered or unexported fields
}

ClientOptions包含客戶機(jī)的可配置選項(xiàng)徐勃。

func NewClientOptions

func NewClientOptions() *ClientOptions

創(chuàng)建一個(gè)帶有一些默認(rèn)值的新ClientClientOptions類(lèi)型。

Port: 1883
CleanSession: True
Order: True
KeepAlive: 30 (seconds)
ConnectTimeout: 30 (seconds)
MaxReconnectInterval 10 (minutes)
AutoReconnect: True

func (*ClientOptions) AddBroker

func (o *ClientOptions) AddBroker(server string) *ClientOptions

AddBroker將代理URI添加到要使用的代理列表中早像。格式應(yīng)該是scheme://host:port疏旨,其中“scheme”是“tcp”、“ssl”或“ws”之一扎酷,“host”是ip地址(或主機(jī)名),“port”是代理接受連接的端口遏匆。默認(rèn)是tcp://127.0.0.1

func (*ClientOptions) SetAutoReconnect

func (o *ClientOptions) SetAutoReconnect(a bool) *ClientOptions</pre>

SetAutoReconnect設(shè)置當(dāng)連接丟失時(shí)是否應(yīng)該使用自動(dòng)重連接邏輯法挨,即使禁用了ConnectionLostHandler仍然被調(diào)用

func (*ClientOptions) SetBinaryWill

func (o *ClientOptions) SetBinaryWill(topic string, payload []byte, qos byte, retained bool) *ClientOptions

SetBinaryWill接受一個(gè)將要設(shè)置的[]字節(jié)的will消息。當(dāng)客戶端連接時(shí)幅聘,它將把這個(gè)will消息發(fā)送給代理凡纳,代理將把所提供的有效負(fù)載(will)發(fā)布給訂閱了所提供主題的任何客戶端。

func (*ClientOptions) SetCleanSession

func (o *ClientOptions) SetCleanSession(clean bool) *ClientOptions

設(shè)置清除session標(biāo)志帝蒿,當(dāng)設(shè)置清除標(biāo)志時(shí)荐糜,代理不會(huì)存儲(chǔ)你發(fā)送的消息,將會(huì)直接轉(zhuǎn)發(fā)給對(duì)應(yīng)的topic

func (*ClientOptions) SetClientID

func (o *ClientOptions) SetClientID(id string) *ClientOptions

SetClientID將設(shè)置客戶機(jī)id葛超,以便在連接到MQTT代理時(shí)由該客戶機(jī)使用暴氏。根據(jù)MQTT 規(guī)范,客戶機(jī)id必須不超過(guò)23個(gè)字符绣张。

func (*ClientOptions) SetConnectTimeout

func (o *ClientOptions) SetConnectTimeout(t time.Duration) *ClientOptions/pre>

SetConnectTimeout限制了客戶機(jī)在超時(shí)并錯(cuò)誤嘗試之前嘗試打開(kāi)到MQTT服務(wù)器的連接時(shí)等待的時(shí)間答渔。0的持續(xù)時(shí)間不會(huì)超時(shí)。默認(rèn)30秒侥涵。目前只能在TCP/TLS連接上運(yùn)行沼撕。

func (*ClientOptions) SetConnectionLostHandler

func (o *ClientOptions) SetConnectionLostHandler(onLost ConnectionLostHandler) *ClientOptions</pre>

SetConnectionLostHandler將設(shè)置OnConnectionLost回調(diào)函數(shù)宋雏,以便在客戶機(jī)意外丟失與MQTT代理的連接時(shí)執(zhí)行。

func (*ClientOptions) SetCredentialsProvider

func (o *ClientOptions) SetCredentialsProvider(p CredentialsProvider) *ClientOptions

SetCredentialsProvider將設(shè)置此客戶機(jī)在連接到提供當(dāng)前用戶名和密碼的MQTT代理時(shí)要調(diào)用的方法务豺。注意:如果不使用SSL/TLS磨总,此信息將以明文形式通過(guò)網(wǎng)絡(luò)發(fā)送。

func (*ClientOptions) SetDefaultPublishHandler

func (o *ClientOptions) SetDefaultPublishHandler(defaultHandler MessageHandler) *ClientOptions

SetDefaultPublishHandler設(shè)置當(dāng)接收到不匹配任何已知訂閱的消息時(shí)將調(diào)用的MessageHandler笼沥。

func (*ClientOptions) SetHTTPHeaders

func (o *ClientOptions) SetHTTPHeaders(h http.Header) *ClientOptions

SetHTTPHeaders設(shè)置將在WebSocket打開(kāi)握手中發(fā)送的附加HTTP頭蚪燕。

func (*ClientOptions) SetKeepAlive

func (o *ClientOptions) SetKeepAlive(k time.Duration) *ClientOptions

SetKeepAlive將設(shè)置客戶機(jī)在向代理發(fā)送PING請(qǐng)求之前應(yīng)該等待的時(shí)間(以秒為單位)村视。這將允許客戶端知道與服務(wù)器的連接沒(méi)有丟失考廉。

func (*ClientOptions) SetMaxReconnectInterval

func (o *ClientOptions) SetMaxReconnectInterval(t time.Duration) *ClientOptions

SetMaxReconnectInterval設(shè)置連接丟失時(shí)设哗,在重新連接嘗試之間等待的最大時(shí)間

func (*ClientOptions) SetMessageChannelDepth

func (o *ClientOptions) SetMessageChannelDepth(s uint) *ClientOptions

SetMessageChannelDepth設(shè)置在客戶端暫時(shí)脫機(jī)時(shí)保存消息的內(nèi)部隊(duì)列的大小屋群,允許應(yīng)用程序在客戶端重新連接時(shí)發(fā)布消息公浪。此設(shè)置僅在AutoReconnect設(shè)置為true時(shí)有效屁商,否則將忽略該設(shè)置额湘。

func (*ClientOptions) SetOnConnectHandler

func (o *ClientOptions) SetOnConnectHandler(onConn OnConnectHandler) *ClientOptions

SetOnConnectHandler設(shè)置客戶機(jī)連接時(shí)要調(diào)用的函數(shù)削解。無(wú)論是在初始連接時(shí)還是在自動(dòng)重新連接時(shí)营勤。

func (*ClientOptions) SetOrderMatters

func (o *ClientOptions) SetOrderMatters(order bool) *ClientOptions

SetOrderMatters將設(shè)置消息路由以保證每個(gè)QoS級(jí)別中的順序灵嫌。默認(rèn)情況下,該值為true葛作。如果設(shè)置為false寿羞,則此標(biāo)志指示消息可以異步地從客戶機(jī)傳遞到應(yīng)用程序,并且可能出現(xiàn)錯(cuò)誤赂蠢。

func (*ClientOptions) SetPassword

func (o *ClientOptions) SetPassword(p string) *ClientOptions

SetPassword將設(shè)置此客戶機(jī)在連接到MQTT代理時(shí)使用的密碼绪穆。注意:如果不使用SSL/TLS,此信息將以明文形式通過(guò)網(wǎng)絡(luò)發(fā)送虱岂。

func (*ClientOptions) SetPingTimeout

func (o *ClientOptions) SetPingTimeout(k time.Duration) *ClientOptions

SetPingTimeout將設(shè)置客戶機(jī)在向代理發(fā)送PING請(qǐng)求之后等待的時(shí)間(以秒為單位)玖院,然后再?zèng)Q定連接是否已經(jīng)丟失。默認(rèn)為10秒第岖。

func (*ClientOptions) SetProtocolVersion

func (o *ClientOptions) SetProtocolVersion(pv uint) *ClientOptions

SetProtocolVersion設(shè)置用于連接到代理的MQTT版本难菌。當(dāng)前合法值為3 - MQTT 3.1或4 - MQTT 3.1.1

func (*ClientOptions) SetResumeSubs

func (o *ClientOptions) SetResumeSubs(resume bool) *ClientOptions

SetResumeSubs將在連接時(shí)啟用已存儲(chǔ)(un)訂閱消息的恢復(fù)功能,但如果CleanSession為false蔑滓,則不會(huì)重新連接郊酒。否則這些消息將被丟棄。

func (*ClientOptions) SetStore

func (o *ClientOptions) SetStore(s Store) *ClientOptions

SetStore將設(shè)置用于在使用QoS級(jí)別qos_1或qos_2的情況下提供消息持久性的Store接口的實(shí)現(xiàn)键袱。如果沒(méi)有提供存儲(chǔ)燎窘,那么客戶端將默認(rèn)使用MemoryStore。

func (*ClientOptions) SetTLSConfig

func (o *ClientOptions) SetTLSConfig(t *tls.Config) *ClientOptions<

設(shè)置SSL/TLS配置蹄咖,以便在連接到MQTT代理時(shí)使用荠耽。

func (*ClientOptions) SetUsername

func (o *ClientOptions) SetUsername(u string) *ClientOptions

SetUsername將設(shè)置此客戶機(jī)在連接到MQTT代理時(shí)使用的用戶名。注意:如果不使用SSL/TLS比藻,此信息將以明文形式通過(guò)網(wǎng)絡(luò)發(fā)送铝量。

func (*ClientOptions) SetWill

func (o *ClientOptions) SetWill(topic string, payload string, qos byte, retained bool) *ClientOptions<

SetWill接受一個(gè)將要設(shè)置的字符串will消息倘屹。當(dāng)客戶端連接時(shí),它將把這個(gè)will消息發(fā)送給代理慢叨,代理將把提供的有效負(fù)載(will)發(fā)布給訂閱了提供主題的任何客戶端纽匙。

func (*ClientOptions) SetWriteTimeout

func (o *ClientOptions) SetWriteTimeout(t time.Duration) *ClientOptions

SetWriteTimeout限制mqtt發(fā)布應(yīng)該阻塞多長(zhǎng)時(shí)間,直到它釋放帶有超時(shí)錯(cuò)誤的阻塞為止拍谐。0的持續(xù)時(shí)間不會(huì)超時(shí)烛缔。默認(rèn)30秒

func (*ClientOptions) UnsetWill

func (o *ClientOptions) UnsetWill() *ClientOptions

UnsetWill將導(dǎo)致任何set will消息被忽略。

type ClientOptionsReader

type ClientOptionsReader struct {
// contains filtered or unexported fields
}

ClientOptionsReader提供了一個(gè)接口轩拨,用于在初始化客戶機(jī)之后讀取ClientOptions践瓷。

func (*ClientOptionsReader) AutoReconnect

func (r *ClientOptionsReader) AutoReconnect() bool

func (*ClientOptionsReader) CleanSession

func (r *ClientOptionsReader) CleanSession() bool

func (*ClientOptionsReader) ClientID

func (r *ClientOptionsReader) ClientID() string

func (*ClientOptionsReader) ConnectTimeout

func (r *ClientOptionsReader) ConnectTimeout() time.Duration

func (*ClientOptionsReader) HTTPHeaders

func (r *ClientOptionsReader) HTTPHeaders() http.Header

func (*ClientOptionsReader) KeepAlive

func (r *ClientOptionsReader) KeepAlive() time.Duration

func (*ClientOptionsReader) MaxReconnectInterval

func (r *ClientOptionsReader) MaxReconnectInterval() time.Duration

func (*ClientOptionsReader) MessageChannelDepth

func (r *ClientOptionsReader) MessageChannelDepth() uint

func (*ClientOptionsReader) Order

func (r *ClientOptionsReader) Order() bool

func (*ClientOptionsReader) Password

func (r *ClientOptionsReader) Password() string

func (*ClientOptionsReader) PingTimeout

func (r *ClientOptionsReader) PingTimeout() time.Duration

func (*ClientOptionsReader) ProtocolVersion

func (r *ClientOptionsReader) ProtocolVersion() uint

func (*ClientOptionsReader) ResumeSubs

func (r *ClientOptionsReader) ResumeSubs() bool

ResumeSubs返回true,如果已啟用了restore stored (un)sub

func (*ClientOptionsReader) Servers

func (r ClientOptionsReader) Servers() []url.URL

Servers返回clientoptions中定義的服務(wù)器的一部分

func (*ClientOptionsReader) TLSConfig

func (r *ClientOptionsReader) TLSConfig() *tls.Config

func (*ClientOptionsReader) Username

func (r *ClientOptionsReader) Username() string

func (*ClientOptionsReader) WillEnabled

func (r *ClientOptionsReader) WillEnabled() bool

func (*ClientOptionsReader) WillPayload

func (r *ClientOptionsReader) WillPayload() []byte

func (*ClientOptionsReader) WillQos

func (r *ClientOptionsReader) WillQos() byte

func (*ClientOptionsReader) WillRetained

func (r *ClientOptionsReader) WillRetained() bool

func (*ClientOptionsReader) WillTopic

func (r *ClientOptionsReader) WillTopic() string

func (*ClientOptionsReader) WriteTimeout

func (r *ClientOptionsReader) WriteTimeout() time.Duration

type ConnectToken

type ConnectToken struct {
// contains filtered or unexported fields
}

onnectToken是令牌的擴(kuò)展亡蓉,包含提供關(guān)于Connect()調(diào)用的信息所需的額外字段

func (*ConnectToken) Error

func (b *ConnectToken) Error() error

func (*ConnectToken) ReturnCode

func (c *ConnectToken) ReturnCode() byte

ReturnCode返回響應(yīng)Connect()而發(fā)送的connack中的acknowlegement代碼

func (*ConnectToken) SessionPresent

func (c *ConnectToken) SessionPresent() bool

SessionPresent返回一個(gè)bool晕翠,表示響應(yīng)Connect()發(fā)送的connack中會(huì)話present字段的值

func (*ConnectToken) Wait

func (b *ConnectToken) Wait() bool

Wait將無(wú)限期地等待令牌完成(從代理發(fā)送發(fā)布并確認(rèn)收據(jù))

func (*ConnectToken) WaitTimeout

func (b *ConnectToken) WaitTimeout(d time.Duration) bool

等待超時(shí)需要時(shí)間。等待與令牌關(guān)聯(lián)的流完成的持續(xù)時(shí)間砍濒,如果在超時(shí)之前返回true淋肾,則返回true;如果超時(shí)發(fā)生,則返回false爸邢。在超時(shí)的情況下樊卓,令牌不會(huì)設(shè)置錯(cuò)誤,以防調(diào)用者希望再次等待

type ConnectionLostHandler

type ConnectionLostHandler func(Client, error)

ConnectionLostHandler是一種回調(diào)類(lèi)型杠河,可以將其設(shè)置為在意外斷開(kāi)與MQTT代理的連接時(shí)執(zhí)行碌尔。調(diào)用Disconnect或ForceDisconnect導(dǎo)致的斷開(kāi)不會(huì)導(dǎo)致執(zhí)行OnConnectionLost回調(diào)。

type CredentialsProvider

type CredentialsProvider func() (username string, password string)

CredentialsProvider允許在重新連接之前更新用戶名和密碼券敌。它應(yīng)該返回當(dāng)前用戶名和密碼唾戚。

type DisconnectToken

type DisconnectToken struct {
// contains filtered or unexported fields
}

DisconnectToken是令牌的擴(kuò)展,包含提供有關(guān)調(diào)用Disconnect()的信息所需的額外字段

func (*DisconnectToken) Error

func (b *DisconnectToken) Error() error

func (*DisconnectToken) Wait

func (b *DisconnectToken) Wait() bool

Wait將無(wú)限期地等待令牌完成(從代理發(fā)送發(fā)布并確認(rèn)收據(jù))

func (*DisconnectToken) WaitTimeout

func (b *DisconnectToken) WaitTimeout(d time.Duration) bool

WaitTimeout takes a time.Duration to wait for the flow associated with the Token to complete, returns true if it returned before the timeout or returns false if the timeout occurred. In the case of a timeout the Token does not have an error set in case the caller wishes to wait again

type DummyToken

type DummyToken struct {
// contains filtered or unexported fields
}

func (*DummyToken) Error

func (d *DummyToken) Error() error

func (*DummyToken) Wait

func (d *DummyToken) Wait() bool

func (*DummyToken) WaitTimeout

func (d *DummyToken) WaitTimeout(t time.Duration) bool

type FileStore

type FileStore struct {
sync.RWMutex
// contains filtered or unexported fields
}

FileStore implements the store interface using the filesystem to provide true persistence, even across client failure. This is designed to use a single directory per running client. If you are running multiple clients on the same filesystem, you will need to be careful to specify unique store directories for each.

func NewFileStore

func NewFileStore(directory string) *FileStore

NewFileStore將創(chuàng)建一個(gè)新的FileStore陪白,該文件存儲(chǔ)在提供的目錄中。

func (*FileStore) All

func (store *FileStore) All() []string

All將提供與當(dāng)前駐留在文件存儲(chǔ)中的消息相關(guān)聯(lián)的所有鍵的列表膳灶。

func (*FileStore) Close

func (store *FileStore) Close()

關(guān)閉將不允許使用文件存儲(chǔ)咱士。

func (*FileStore) Del

func (store *FileStore) Del(key string)

Del將從文件存儲(chǔ)中刪除與提供的密鑰相關(guān)聯(lián)的持久消息。

func (*FileStore) Get

func (store *FileStore) Get(key string) packets.ControlPacket

Get將從存儲(chǔ)中檢索與提供的鍵值相關(guān)聯(lián)的消息轧钓。

func (*FileStore) Open

func (store *FileStore) Open()

打開(kāi)將允許使用文件存儲(chǔ)序厉。

func (*FileStore) Put

func (store *FileStore) Put(key string, m packets.ControlPacket)

Put將向存儲(chǔ)中放入一條與所提供的鍵值相關(guān)聯(lián)的消息。

func (*FileStore) Reset

func (store *FileStore) Reset()

重置將從文件存儲(chǔ)中刪除所有持久性消息毕箍。

type Logger

type Logger interface {
Println(v ...interface{})
Printf(format string, v ...interface{})
}

Logger接口允許實(shí)現(xiàn)向這個(gè)包提供任何實(shí)現(xiàn)其中定義的方法的對(duì)象弛房。

var (
ERROR Logger = NOOPLogger{}
CRITICAL Logger = NOOPLogger{}
WARN Logger = NOOPLogger{}
DEBUG Logger = NOOPLogger{}
)

庫(kù)輸出的內(nèi)部級(jí)別,初始化為不打印任何內(nèi)容而柑,但可以由程序員重寫(xiě)

type MId

type MId uint16

MId是MQTT規(guī)范指定的16位消息id文捶。通常荷逞,客戶機(jī)應(yīng)用程序不應(yīng)該依賴這些值。

type MemoryStore

type MemoryStore struct {
sync.RWMutex
// contains filtered or unexported fields
}

MemoryStore實(shí)現(xiàn)了store接口粹排,以提供完全存儲(chǔ)在內(nèi)存中的“持久性”機(jī)制种远。這只在客戶機(jī)實(shí)例存在時(shí)才有用。

func NewMemoryStore

func NewMemoryStore() *MemoryStore

NewMemoryStore返回指向MemoryStore新實(shí)例的指針顽耳,在調(diào)用Open()之前不會(huì)初始化該實(shí)例并準(zhǔn)備使用它坠敷。

func (*MemoryStore) All

func (store *MemoryStore) All() []string

All返回一個(gè)字符串片段,其中包含內(nèi)存存儲(chǔ)中當(dāng)前的所有鍵射富。

func (*MemoryStore) Close

func (store *MemoryStore) Close()

Close將不允許修改存儲(chǔ)的狀態(tài)膝迎。

func (*MemoryStore) Del

func (store *MemoryStore) Del(key string)

Del接受一個(gè)鍵,搜索MemoryStore胰耗,如果找到該鍵限次,則刪除與其關(guān)聯(lián)的消息指針。

func (*MemoryStore) Get

func (store *MemoryStore) Get(key string) packets.ControlPacket

Get接受一個(gè)鍵并在存儲(chǔ)中查找匹配的消息宪郊,該消息要么返回消息指針掂恕,要么返回nil。

func (*MemoryStore) Open

func (store *MemoryStore) Open()

Open初始化MemoryStore實(shí)例弛槐。

func (*MemoryStore) Put

func (store *MemoryStore) Put(key string, message packets.ControlPacket)<

Put接受指向消息的鍵和指針懊亡,并存儲(chǔ)消息。

func (*MemoryStore) Reset

func (store *MemoryStore) Reset()

重置消除存儲(chǔ)中的所有持久消息數(shù)據(jù)乎串。

type Message

type Message interface {
Duplicate() bool
Qos() byte
Retained() bool
Topic() string
MessageID() uint16
Payload() []byte
Ack()
}

Message定義了消息實(shí)現(xiàn)必須支持的外部店枣,這些外部是傳遞給回調(diào)的接收消息,而不是內(nèi)部消息

type MessageHandler

type MessageHandler func(Client, Message)

MessageHandler是一種回調(diào)類(lèi)型叹誉,可以將其設(shè)置為在發(fā)布到客戶端訂閱的主題的消息到達(dá)時(shí)執(zhí)行鸯两。

type NOOPLogger

type NOOPLogger struct{}

NOOPLogger實(shí)現(xiàn)了默認(rèn)情況下不執(zhí)行任何操作的日志記錄器。這允許我們有效地丟棄不需要的消息长豁。

func (NOOPLogger) Printf

func (NOOPLogger) Printf(format string, v ...interface{})

func (NOOPLogger) Println

func (NOOPLogger) Println(v ...interface{})

type OnConnectHandler

type OnConnectHandler func(Client)

OnConnectHandler是一個(gè)回調(diào)函數(shù)钧唐,當(dāng)客戶機(jī)狀態(tài)從未連接/斷開(kāi)連接更改為已連接時(shí),將調(diào)用該回調(diào)函數(shù)匠襟。無(wú)論是在初始連接還是在重新連接時(shí)

type PacketAndToken

type PacketAndToken struct {
// contains filtered or unexported fields
}

PacketAndToken是一個(gè)結(jié)構(gòu)體钝侠,它同時(shí)包含一個(gè)控制包和一個(gè)令牌。這個(gè)結(jié)構(gòu)通過(guò)客戶機(jī)接口代碼和負(fù)責(zé)發(fā)送和接收MQTT消息的底層代碼之間的通道傳遞酸舍。

type PublishToken

type PublishToken struct {
// contains filtered or unexported fields
}
PublishToken是令牌的擴(kuò)展帅韧,包含提供關(guān)于Publish()調(diào)用的信息所需的額外字段

func (*PublishToken) Error

func (b *PublishToken) Error() error

func (*PublishToken) MessageID

func (p *PublishToken) MessageID() uint16

MessageID返回發(fā)送給代理時(shí)分配給發(fā)布包的MQTT消息ID

func (*PublishToken) Wait

func (b *PublishToken) Wait() bool

Wait將無(wú)限期地等待令牌完成(從代理發(fā)送發(fā)布并確認(rèn)收據(jù))

func (*PublishToken) WaitTimeout

func (b *PublishToken) WaitTimeout(d time.Duration) bool

等待超時(shí)需要時(shí)間。等待與令牌關(guān)聯(lián)的流完成的持續(xù)時(shí)間啃勉,如果在超時(shí)之前返回true忽舟,則返回true;如果超時(shí)發(fā)生,則返回false。在超時(shí)的情況下叮阅,令牌不會(huì)設(shè)置錯(cuò)誤刁品,以防調(diào)用者希望再次等待

type Store

type Store interface {
Open()
Put(key string, message packets.ControlPacket)
Get(key string) packets.ControlPacket
All() []string
Del(key string)
Close()
Reset()
}

Store是一個(gè)接口,可用于提供消息持久性的實(shí)現(xiàn)帘饶。因?yàn)槲覀兛赡鼙仨毷褂孟嗤南D存儲(chǔ)不同的消息哑诊,所以我們需要為每個(gè)消息提供一個(gè)惟一的密鑰。這可以通過(guò)在每個(gè)消息id前加上“i.”或“o.”來(lái)實(shí)現(xiàn)

type SubscribeToken

type SubscribeToken struct {
// contains filtered or unexported fields
}

SubscribeToken是令牌的擴(kuò)展及刻,包含提供關(guān)于Subscribe()調(diào)用的信息所需的額外字段

func (*SubscribeToken) Error

func (b *SubscribeToken) Error() error</pre>

func (*SubscribeToken) Result

func (s *SubscribeToken) Result() map[string]byte

Result返回已訂閱主題的映射镀裤,以及來(lái)自代理的匹配返回代碼。這要么是訂閱的Qos值缴饭,要么是錯(cuò)誤代碼暑劝。

func (*SubscribeToken) Wait

func (b *SubscribeToken) Wait() bool

Wait將無(wú)限期地等待令牌完成(從代理發(fā)送發(fā)布并確認(rèn)收據(jù))

func (*SubscribeToken) WaitTimeout

func (b *SubscribeToken) WaitTimeout(d time.Duration) bool

等待超時(shí)需要時(shí)間。等待與令牌關(guān)聯(lián)的流完成的持續(xù)時(shí)間颗搂,如果在超時(shí)之前返回true担猛,則返回true;如果超時(shí)發(fā)生,則返回false丢氢。在超時(shí)的情況下傅联,令牌不會(huì)設(shè)置錯(cuò)誤,以防調(diào)用者希望再次等待

type Token

type Token interface {
Wait() bool
WaitTimeout(time.Duration) bool
Error() error
}

令牌定義用于指示操作何時(shí)完成的令牌的接口疚察。

type TokenErrorSetter

type TokenErrorSetter interface {
// contains filtered or unexported methods
}

type UnsubscribeToken

type UnsubscribeToken struct {
// contains filtered or unexported fields
}

UnsubscribeToken是令牌的擴(kuò)展蒸走,包含提供有關(guān)調(diào)用Unsubscribe()的信息所需的額外字段

func (*UnsubscribeToken) Error

func (b *UnsubscribeToken) Error() error

func (*UnsubscribeToken) Wait

func (b *UnsubscribeToken) Wait() bool

Wait將無(wú)限期地等待令牌完成(從代理發(fā)送發(fā)布并確認(rèn)收據(jù))

func (*UnsubscribeToken) WaitTimeout

func (b *UnsubscribeToken) WaitTimeout(d time.Duration) bool

等待超時(shí)需要時(shí)間。等待與令牌關(guān)聯(lián)的流完成的持續(xù)時(shí)間貌嫡,如果在超時(shí)之前返回true比驻,則返回true;如果超時(shí)發(fā)生,則返回false岛抄。在超時(shí)的情況下别惦,令牌不會(huì)設(shè)置錯(cuò)誤,以防調(diào)用者希望再次等待

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夫椭,一起剝皮案震驚了整個(gè)濱河市掸掸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹭秋,老刑警劉巖扰付,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異感凤,居然都是意外死亡悯周,警方通過(guò)查閱死者的電腦和手機(jī)粒督,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)陪竿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事族跛∪虻玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵礁哄,是天一觀的道長(zhǎng)长酗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)桐绒,這世上最難降的妖魔是什么夺脾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮茉继,結(jié)果婚禮上咧叭,老公的妹妹穿的比我還像新娘。我一直安慰自己烁竭,他們只是感情好菲茬,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著派撕,像睡著了一般婉弹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上终吼,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天镀赌,我揣著相機(jī)與錄音,去河邊找鬼衔峰。 笑死佩脊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的垫卤。 我是一名探鬼主播威彰,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼穴肘!你這毒婦竟也來(lái)了歇盼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤评抚,失蹤者是張志新(化名)和其女友劉穎豹缀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體慨代,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邢笙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侍匙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氮惯。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妇汗,到底是詐尸還是另有隱情帘不,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布杨箭,位于F島的核電站寞焙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏互婿。R本人自食惡果不足惜捣郊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慈参。 院中可真熱鬧模她,春花似錦、人聲如沸懂牧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)僧凤。三九已至畜侦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間躯保,已是汗流浹背旋膳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留途事,地道東北人验懊。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尸变,于是被迫代替她去往敵國(guó)和親义图。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容