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例子

NetMQ(二): 请求响应模式 Request-Reply的更多相关文章

  1. 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式

    一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识,  1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...

  2. 一: WCF的服务端与客户端在通信时有三种模式:请求响应模式、数据报模式和双工通讯模式。

    说一下基本知识,  1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契约 2.要想将方法作为wcf服务方法发布给外部调用,则一定要加上    [Operatio ...

  3. activeMQ的request-response请求响应模式

    一:为什么需要请求响应模式 在消息中间中,生产者只负责生产消息,而消费者只负责消费消息,两者并无直接的关联.但是如果生产者想要知道消费者有没有消费完,或者用不用重新发送的时候,这时就要用到请求响应模式 ...

  4. WCF消息交换模式之请求-响应模式

    WCF的消息交换模式(MEP)有三种:请求/响应.单向模式和双工模式.WCF的默认MEP是请求/响应模式. 请求/响应模式操作签名代码如下,无需指定模式,默认就是. [OperationContrac ...

  5. WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)

    1.使用WCF请求与答复模式须知 (1).客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后 ...

  6. Katalon Studio学习笔记(二)——请求响应中文乱码解决方法

    Katalon Studio接口测试发现返回的中文消息是乱码,这是因为KS的编码格式是UTF-8,因此导致中文字体出现乱码.如下图所示: 在我们的系统中添加一个名字为JAVA_TOOL_OPTIONS ...

  7. “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式

    在前一篇, “一切都是消息”--MSF(消息服务框架)入门简介, 我们介绍了MSF基于异步通信,支持请求-响应通信模式和发布-订阅通信模式,并且介绍了如何获取MSF.今天,我们来看看如何使用MSF来做 ...

  8. “一切都是消息”--iMSF(即时消息服务框架)之【请求-响应】模式(点对点)

    MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...

  9. HTTP请求响应机制与响应状态码

    转载来源:http://blog.csdn.net/xyw591238/article/details/51907143 HTTP协议 Internate的基本协议是TCP/IP(传输控制协议和网际协 ...

随机推荐

  1. 【辅助远程连接,可穿防火墙、NAT】一次 TeamViewer 的安装与测试

    背景: 应课程老师要求帮助某化学老师维修机器(高性能电脑),并解决老师的若干问题,在解决硬件问题(上网问题:多个网络接口)之后,化学老师提出需要远程链接到该机器,试询问之前如何实现,化学老师推荐Tea ...

  2. Mac下安装ionic和cordova,并生成iOS项目

    为了开发HTML5,除了最新使用React Native等之外,目前首选的为稳定的ionic+Angularjs来开发iOS和android. Ionic(ionicframework一款接近原生的H ...

  3. Windows 7 OpenGL配置

    http://blog.csdn.net/qingyang8513/article/details/45155245

  4. JavaScript 智能社 拖拽

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  5. 2.0、Hibernate框架的简单搭建

    一.Hibernate:是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句 ...

  6. rcu机制

    转载自:再谈Linux内核中的RCU机制-MagicBoy2010-ChinaUnix博客 http://blog.chinaunix.net/uid-23769728-id-3080134.html ...

  7. android 弹出AlertDialog的学习案例

    我在编写的时候,测试的关键代码: AlertDialog.Builder builder=new AlertDialog.Builder(MainPointListActivity.this); bu ...

  8. 第3月第23天 EAIntroView

    1. EAIntroView,界面和模型分离.EAIntroPage数据模型,EAIntroView界面. https://github.com/ealeksandrov/EAIntroView

  9. Linux下查看磁盘与目录的容量——df、du

    df:列出文件系统的整体磁盘使用量: du:评估文件系统的磁盘使用量(常用于评估目录所占容量) df参数: -a:列出所有的文件系统,包括系统特有的/proc等文件系统 -k:以KB的容量显示各文件系 ...

  10. zabbix安装配置界面点击next step没反应

    修改/var/lib/php/session/宿主或者添加777权限 看到有个人说这个不能用,一开始我也没用,找了各种方式都不行,最后死马当作活马医,改了下权限,卧槽,一下子就OK了,日