国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

MQ

2019-04-18 18:39 更新

MQ庫(kù)

MQ庫(kù)是CF框架針對(duì)httpd的Websocket路由實(shí)現(xiàn)的一種訂閱發(fā)布庫(kù).

眾所周知: 客戶(hù)端在使用Websocket協(xié)議與服務(wù)端進(jìn)行通信的情況下, 服務(wù)端需要主動(dòng)推送必須處于一種'定時(shí)器/訂閱'的狀態(tài)才能主動(dòng)觸發(fā)推送消息到客戶(hù)端.

MQ借用Redis/MQTT的subscribe與publish實(shí)現(xiàn)此種功能.

MQ:new(opt)

opt.hostMQ Broker的主機(jī)名或IP地址.

opt.portMQ Broker的主機(jī)端口號(hào).

opt.typeMQ Broker的類(lèi)型(redis/mqtt).

opt.authMQ Broker(redis類(lèi)型專(zhuān)有)用于redis broken驗(yàn)證.

opt.username/passwordMQ Broker(mqtt類(lèi)型專(zhuān)有)用于username/password驗(yàn)證.

此方法返回一個(gè)MQ實(shí)例.

MQ:on(pattern, function handle(msg) end)

patternstring類(lèi)型, 用來(lái)指定訂閱的位置;

handlefunction類(lèi)型, 訂閱消息到回調(diào)處理函數(shù);

msg table類(lèi)型, 消息根據(jù)不同類(lèi)型broker各有差異;

這里根據(jù)script/ws.lua文件精簡(jiǎn)之后給出一段代碼示例:

    local MQ = require "MQ"
    local class = require "class"


    local websocket = class("websocket")


    function websocket:ctor(opt)
        self.ws = opt.ws             -- websocket對(duì)象
        self.mq = MQ:new({host = 'localhost', port = 6379, type = 'redis'})
    end


    function websocket:on_open()
        self.mq:on('/test/*', function (msg) -- 消息隊(duì)列
            if not msg then
                self.ws:send('{"code":500,"message":"無(wú)法連接到mq broker(redis)"}')
                return self.ws:close()
            end
            self.ws:send('{"code":200}')
        end)
    end

此方法返回true表示訂閱成功, 但情況下可忽略. msg為nil的情況下說(shuō)明mq broker已經(jīng)斷開(kāi)連接.

MQ:emit(pattern, data)

patternstring類(lèi)型, 用來(lái)指定data所需要發(fā)布到的訂閱位置;

datastring類(lèi)型, 需要發(fā)布的消息;

  --- 代碼示例
  local ok = MQ:emit('/test/admin', '{"code":200}')

此方法返回true表示發(fā)布成功, 但是不要過(guò)于依賴(lài)返回值. 因?yàn)镸Q內(nèi)置斷線重連機(jī)制, 因?yàn)榫W(wǎng)絡(luò)異常等原因可能會(huì)很久才會(huì)返回.

MQ:close()

此方法用來(lái)正確關(guān)閉MQ的發(fā)布與訂閱.

如果使用者將MQ用在websocket, 需要關(guān)閉時(shí)應(yīng)該在websocket的on_close方法關(guān)閉(推薦)

如果用在其它地方, 請(qǐng)仔細(xì)調(diào)試過(guò)后再試用. 作者不保證在websocket以外的地方能正常(正確)工作.

此方法沒(méi)有返回值.

最后

有小伙伴對(duì)websocket長(zhǎng)連接有興趣的可以下載cf發(fā)布在docker hub上的容器體驗(yàn)一下, 使用chrome的websocket客戶(hù)端插件(smart websocket client)就可以對(duì)接查看效果.

MQ庫(kù)是因?yàn)闉閷?duì)接第三方協(xié)議(gRPC等)平臺(tái)而自己創(chuàng)建的一種消息通訊方式. 很多使用者因?yàn)樽孕卸ㄖ苹瘏f(xié)議, 所以CF作者用MQ示例來(lái)作為一種最直觀的對(duì)接方式.

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)