• 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 :
    {0}
    ", 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例子

  • 相关阅读:
    Java中基于线程池的任务调度设计
    Java中数值型,字符型及字符串的相互转换
    Java编程中必备的十种技能
    Java键盘读入方法
    Java中数据类型及运算符的注意事项
    Java抽象类是否可继承实体类
    Java多线程:start(),sleep(),yield(),join()
    Java线程静态在对象缓存中的妙用
    webAPI
    javascript中的作用域和变量提升
  • 原文地址:https://www.cnblogs.com/weiqinl/p/5461055.html
Copyright © 2020-2023  润新知