NetMQ(二): 請求響應模式 Request-Reply


ZeroMQ系列 之NetMQ

一:zeromq簡介

二:NetMQ 請求響應模式 Request-Reply

三:NetMQ 發布訂閱模式 Publisher-Subscriber

四:NetMQ 推拉模式 Push-Pull

NetMQ 請求響應模式 Request-Reply

1:簡介

請求響應模式,客戶端發起一個請求,服務端接收到消息,響應對應的內容給客戶端。

2:案例說明

我們從一個簡單的例子,即 HelloWorld 項目講起。這就是網絡請求中最基本的“請求-響應”模式(Request-Reply),客戶端往服務端發送“Hello”,服務端回應“World”,如圖1。

圖1

  • NetMQ 版本號 3.3.3.1

  • .net45

客戶端(請求端):

class Program
{
    static void Main(string[] args)
    {
        using (NetMQSocket clientSocket = new RequestSocket())
        {
            Random rd = new Random();
            int num = rd.Next(0, 100);
            clientSocket.Connect("tcp://127.0.0.1:5555");
            while (true)
            {
                Console.WriteLine(num + ",Please enter your message:");
                string message = Console.ReadLine();
                clientSocket.SendFrame(num + ":" + message);

                string answer = clientSocket.ReceiveFrameString();

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

                if (message == "exit")
                {
                    break;
                }
            }
        }
    }
}

服務端(響應端):

class Program
{
    static void Main(string[] args)
    {
        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];


                #region 根據接收到的消息,返回不同的信息
                if (message == "Hello")
                {
                    serverSocket.SendFrame("World");
                }
                else if (message == "ni hao ")
                {
                    serverSocket.SendFrame("你好!");
                }
                else if (message == "hi")
                {
                    serverSocket.SendFrame("HI");
                }
                else
                {
                    serverSocket.SendFrame(message);
                }
                #endregion

                if (message == "exit")
                {
                    break;
                }
            }
        }

    }
}

效果圖:

啟動一個客戶端,一個服務器端。
然后,輸入一些消息,得到的結果圖:

從圖中可以看到,客戶端接收到的消息不同,服務器響應的消息也不同。這樣,就可以定制返回的消息。

3:總結

  1. 服務端和客戶端無論誰先啟動,效果是相同的,這點不同於Socket。
  2. 在服務端收到信息以前,程序是阻塞的,會一直等待客戶端連接上來。
  3. 服務端收到信息以后,會send一個“World”給客戶端。值得注意的是一定是client連接上來以后,send消息給Server,然后Server再rev然后響應client,這種一問一答式的。如果Server先send,client先rev是會報錯的。
  4. ZMQ通信通信單元是消息,他除了知道Bytes的大小,他並不關心的消息格式。因此,你可以使用任何你覺得好用的數據格式。Xml、Protocol Buffers、Thrift、json等等。
  5. 雖然可以使用ZMQ實現HTTP協議,但是,這絕不是他所擅長的。

4:下載地址

下載地址:請求響應模式例子

NetMQ3.3.3.1例子
NetMQ3.3.2.2例子


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM