京東價格監控軟件開發技術探討十五:通過酷Q和ZeroMQ實現推送變價變庫消息到QQ羣

在對該需求展開進行說明前,我們需要先了解幾個基本名詞。

1、酷Q是什麼?

簡單來說,酷Q是一個QQ機器人軟件,能在QQ羣裏回答、發佈信息。相關的機器人軟件比較多,如QQLight、

2、ZeroMQ是什麼?

簡單來說,ZeroMQ是一個網絡層的數據通信組件,支持TCP或UDP發送數據。具體到C#,有一個NetMQ的組件,簡單好用。

酷Q的使用就不多說了,可以加入酷Q官網或者相關技術羣進行學習。

NetMQ的使用非常簡單,我們需要創建一個服務端和一個客戶端。服務端接收數據,客戶端發送數據。

第一步:引用兩個類庫,AsyncIO和NetMQ,可直接在NuGet下載。

第二步:創建服務端,通過While(true)保持監聽

using (NetMQSocket serverSocket = new ResponseSocket())
{
    serverSocket.Bind("tcp://127.0.0.1:5555");
    while (true)
    {
        string message1 = serverSocket.ReceiveFrameString();
        Console.WriteLine("Receive message :\r\n{0}\r\n", message1);
        string[] msg = message1.Split(':');
        string message = msg[1];

        serverSocket.SendFrame(message);
        if (message == "exit")
        {
            break;
        }
    }
}

第三步:創建客戶端

 using (NetMQSocket clientSocket = new RequestSocket())
 {
    clientSocket.Connect("tcp://127.0.0.1:5555");
    string message = "Hello";
    clientSocket.SendFrame(num + ":" + message);

    string answer = clientSocket.ReceiveFrameString();
    Console.WriteLine("Answer from server:{0}", answer);
 }

 需要特別注意的是,客戶端必須接收服務端的回饋信息,否則會報異常。

上面三步就已經搭建起了基本的NetMQ通信框架。現在我們將這段代碼移植到酷Q插件中去。

在插件加載的事件中,將酷QAPI的對象存儲下來,然後創建一個NetMQHelper類,在該類的Push(方法名稱隨意)事件中,編寫如下代碼。

Task.Factory.StartNew(() =>
                {
                    using (this.Socket = new ResponseSocket($"@tcp://{Common.NetMQSrv}:{Common.ZeroMqPort}"))
                    {
                        BEnable = true;
                        while (BEnable)
                        {
                            //log.Info("ZeroMQ", "Execing");
                            string msg = this.Socket.ReceiveFrameString();
                            if (!string.IsNullOrEmpty(msg))
                            {
                                //log.Info("ZeroMQ", msg);
                                File.AppendAllText($@"{Common.RunDirectory}/Logs/NetMQ.log", $"{DateTime.Now} 收到 {msg}\r\n");
                                if (OnMessage != null)
                                {
                                    OnMessage(msg);
                                }

                            }
                            Socket.SendFrame(msg);
                            //Console.WriteLine("進行 線程" + Thread.CurrentThread.ManagedThreadId);
                        }
                    }
                }, TaskCreationOptions.LongRunning);

其中的OnMessage是一個代理事件,當通過NetMQ接收到數據後,可通過OnMessage和其它業務關聯起來進行業務處理,比如調用酷Q的羣消息推送。

操作原理就是這樣了,趕緊去試試,不明白的可以加羣一起討論。在此說明下,插件的開發是使用的Native.SDK開發框架,在網上搜搜,此處就略過不表。

殺京東 做最走心的電商輿情監控平臺 免費開源的價格監控軟件 歡迎加入QQ羣415014949一起討論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章