在對該需求展開進行說明前,我們需要先了解幾個基本名詞。
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一起討論