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:总结
- 服务端和客户端无论谁先启动,效果是相同的,这点不同于Socket。
- 在服务端收到信息以前,程序是阻塞的,会一直等待客户端连接上来。
- 服务端收到信息以后,会send一个“World”给客户端。值得注意的是一定是client连接上来以后,send消息给Server,然后Server再rev然后响应client,这种一问一答式的。如果Server先send,client先rev是会报错的。
- ZMQ通信通信单元是消息,他除了知道Bytes的大小,他并不关心的消息格式。因此,你可以使用任何你觉得好用的数据格式。Xml、Protocol Buffers、Thrift、json等等。
- 虽然可以使用ZMQ实现HTTP协议,但是,这绝不是他所擅长的。
4:下载地址
下载地址:请求响应模式例子
NetMQ(二): 请求响应模式 Request-Reply的更多相关文章
- 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式
一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...
- 一: WCF的服务端与客户端在通信时有三种模式:请求响应模式、数据报模式和双工通讯模式。
说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契约 2.要想将方法作为wcf服务方法发布给外部调用,则一定要加上 [Operatio ...
- activeMQ的request-response请求响应模式
一:为什么需要请求响应模式 在消息中间中,生产者只负责生产消息,而消费者只负责消费消息,两者并无直接的关联.但是如果生产者想要知道消费者有没有消费完,或者用不用重新发送的时候,这时就要用到请求响应模式 ...
- WCF消息交换模式之请求-响应模式
WCF的消息交换模式(MEP)有三种:请求/响应.单向模式和双工模式.WCF的默认MEP是请求/响应模式. 请求/响应模式操作签名代码如下,无需指定模式,默认就是. [OperationContrac ...
- WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)
1.使用WCF请求与答复模式须知 (1).客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后 ...
- Katalon Studio学习笔记(二)——请求响应中文乱码解决方法
Katalon Studio接口测试发现返回的中文消息是乱码,这是因为KS的编码格式是UTF-8,因此导致中文字体出现乱码.如下图所示: 在我们的系统中添加一个名字为JAVA_TOOL_OPTIONS ...
- “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式
在前一篇, “一切都是消息”--MSF(消息服务框架)入门简介, 我们介绍了MSF基于异步通信,支持请求-响应通信模式和发布-订阅通信模式,并且介绍了如何获取MSF.今天,我们来看看如何使用MSF来做 ...
- “一切都是消息”--iMSF(即时消息服务框架)之【请求-响应】模式(点对点)
MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...
- HTTP请求响应机制与响应状态码
转载来源:http://blog.csdn.net/xyw591238/article/details/51907143 HTTP协议 Internate的基本协议是TCP/IP(传输控制协议和网际协 ...
随机推荐
- phpexcel 字符串转码
问题状况:在导入excel的时候会出现 PHPExcel_RichText Object ( [_richTextElements:PHPExcel_RichText:] => PHPExcel ...
- VS2015 调试Web项目 遭遇 HTTP 错误 500.23 - Internal Server Error
此错误是因为项目使用的托管管道模式有问题,将集成改为传统即可 选中项目 进入项目属性 ,如图界面
- 关于在Xcode控制台打印的注意点
注意!!在控制台中打印语句的返回值,这句代码也算是被执行过了一次 比如在下列代码的if语句执行之前,现在控制台打印 [_dataBaseexecuteUpdate:createSql] 的布尔值 if ...
- spring统一日志管理,切面(@Aspect),注解式日志管理
step1 开启切面编程 <!-- 开启切面编程(通过配置织入@Aspectj切面 ) --> <aop:aspectj-autoproxy/> <aop:aspectj ...
- 看着水了一天的群,终于看到一段高质量的代码了分享一下localStorage
_history : { //缓存 isLocalStorage:window.localStorage?true:false, set : function(key,value){ //设置缓存 i ...
- 【ueditor】api方法
//让其选中文本高亮 editor.selection.getRange().select(); //高亮后,才能获取到选中文本,当选中字失去焦点的情况下是获取不到的选中文本的 var text = ...
- Quick Cocos 旋转子弹的实现中我学到的
self 在lua中相当于java中的this lua中的任何变量在没有赋值前, 都可以看做是nil lua变量有3种,成员变量: self.变量名 = 局部变量: local 变量名 = 全局变量 ...
- c语言经典算法——猴子偷桃问题
题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿 ...
- PHP中::、->、self、$this操作符的区别
在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::,反之如果被引用的变量或者方法没有被声明成const或者 ...
- pycharm快捷键及一些常用设置
pycharm快捷键及一些常用设置,有需要的朋友可以参考下. Alt+Enter 自动添加包 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+ ...