1、请求/应答模式(REP/REQ)

该模式特征:

  • 服务器使用REP类型套接字而客户端使用REQ类型套接字
  • 客户端发送请求和接收答复,而服务器则接收请求并发送答复
  • 客户端可以连接到一个或多个服务器。在这种情况下,请求会在所有的服务器(Reps)之间循环,一个请求被发送到某个服务器,下一个请求则被发送到下个服务器,如此进行下去。
  • 基于状态的模式:客户端在发送另一个请求之前,必须先接收前一个请求的答复。而服务器在接收另一个请求之前,必须答复前一个请求。

 //服务器端代码
private static void Main(string[] args)
{
using (var context = ZContext.Create())
{
using (var resp = new ZSocket(context, ZSocketType.REP))
{
resp.Bind("tcp://*:5555");
while (true)
{
ZFrame reply = resp.ReceiveFrame();
string message = reply.ReadString(); Console.WriteLine("Receive message {0}", message); resp.Send(new ZFrame(message)); if (message == "exit")
{
break;
}
}
}
}
}

服务器端代码

 //客户端代码
static void Main(string[] args)
{
using (var context = new ZContext())
using (var requester = new ZSocket(context, ZSocketType.REQ))
{
// Connect
requester.Connect("tcp://127.0.0.1:5555"); while(true)
{
Console.WriteLine("Please enter your message:");
string message = Console.ReadLine();
requester.Send(new ZFrame(message)); // Send
//requester.Send(new ZFrame(requestText)); // Receive
using (ZFrame reply = requester.ReceiveFrame())
{
Console.WriteLine("Received: {0} {1}!", message, reply.ReadString());
if ("exit" == reply.ReadString())
{
break;
}
}
}
}
}

客户端代码

2、发布/订阅模式Publish/Subscribe(PUB/SUB)

该模式具有一下特征:

  • 发布者使用PUB类型套接字和订阅者则使用SUB类型套接字
  • 一个发布者可以有一个或者多个订阅者
  • 一个订阅者可以连接到一个或者多个发布者
  • 发布者发送消息而订阅者接收消息
  • 订阅者可以使用SubscribeAll方法订阅所有的发布者消息,可以使用Subscrube方法订阅某个特定的消息,这时要将所感兴趣的发布者的消息前缀作为参数。对消息的过滤发生在订阅者端,即发布者将其所有的消息发送给订阅者,而订阅者负责将不需要的消息丢弃。
  • 订阅者可以用UnsubscribeAll方法取消所有订阅,也可以使用Unsubscribe方法加上消息前缀来退订某个发布者。
  • 发布者将消息发送到已连接的所有订阅者。
  • 如果发布者没有和任何订阅者连接,那么消息将会被丢弃。
  • 如订阅者连接到多个发布者,那么它会均匀的接收所有发布者的消息(公平队列)。

 //发布者
static void Publisher()
{
using (var context = new ZContext())
using (var publisher = new ZSocket(context, ZSocketType.PUB))
{
publisher.Bind("tcp://127.0.0.1:5555");
Random random = new Random();
while (true)
{
string message = string.Format("Random: {0}", random.Next());
publisher.Send(new ZFrame(message));
Console.WriteLine("Send:{0}", message);
Thread.Sleep();
}
}
}

发布者

 //订阅者
static void Subscribe()
{
using (var context = new ZContext())
using (var subscribe = new ZSocket(context, ZSocketType.SUB))
{
subscribe.SubscribeAll();
subscribe.Connect("tcp://127.0.0.1:5555");
while (true)
{ using (ZFrame replay = subscribe.ReceiveFrame())
{
Console.WriteLine("REceive: {0}", replay.ReadString());
}
} }
}

订阅者

3、管道模式(Push/Pull)

当需要进行并行数据处理时,通常会用到该模式。管道模式使用场景如下所示:

  • 1.首先任务分发器通常以循环方式将消息(任务)推送给工作单元(每个工作单元有不同任务)
  • 2.接收到消息时工作单元会先对其进行处理,然后将它推送给接收消息(任务)的某种任务收集器。
  • 3.收集器以公平排队的方法从期连接的所有工作单元那接收消息。

该模式具有一下特征:

  • 任务分发器使用PUSH类型的套接字。它绑定到端点,并等待工作单元的连接。
  • 工作单元有两个套接字,一个使用PULL类型连接到任务分发器,另一个则是PUSH类型,负责和收集器的连接。
  • 任务收集器使用PULL类型套接字。它绑定到端点,并等待接收工作单元的连接。

【ZeroMQ】消息模式的更多相关文章

  1. 【WCF全析(一)】--服务协定及消息模式

    上周微软开发布会说.NET支持完全跨平台和并开放Core源码的新闻,让我们顿时感到.NET要迎来它的春天.虽然早在几年前.NET就能开发Android和IOS,但是这次的跨平台把Linux都放到了微软 ...

  2. 关于 ActiveMQ 的消息模式

    1.JMS Queue 执行 load balancer语义:一条消息仅能被一个 consumer(消费者) 收到.如果在 message 发送的时候没有可用的consumer,那么它将被保存一直到能 ...

  3. 【架构之路之WCF全析(一)】--服务协定及消息模式

    上周微软开公布会说.NET支持全然跨平台和并开放Core源代码的新闻,让我们顿时感到.NET要迎来它的春天.尽管早在几年前.NET就能开发Android和IOS,可是这次的跨平台把Linux都放到了微 ...

  4. wcf消息模式(随记)

    ----------------------------------------------消息模式:1.request\reply(默认)2.one-way(单工)[Isoneway=true]客户 ...

  5. ActiveMQ发布-订阅消息模式

    一.订阅杂志我们很多人都订过杂志,其过程很简单.只要告诉邮局我们所要订的杂志名.投递的地址,付了钱就OK.出版社定期会将出版的杂志交给邮局,邮局会根据订阅的列表,将杂志送达消费者手中.这样我们就可以看 ...

  6. kcp流模式与消息模式对比

    kcp的流模式,和消息模式 流模式: 更高的网络利用率 更大的传输速度 解析数据相对更复杂 消息模式: 更小的网络利用率 更小的传输速度 解析数据相对更简单 消息模式的示意图 http://www.p ...

  7. RocketMQ学习笔记(15)----RocketMQ的消息模式

    在前面学习ActiveMQ时,看到ActiveMQ可以是队列消息模式,也可以是订阅发布模式. 同样,在RocketMQ中,也存在两种消息模式,即是集群消费模式和广播消费模式. 1. 集群消费模式 跟A ...

  8. wcf中的消息模式

    1请求响应模式 a.wcf中的消息模式默认是请求响应模式 b.返回值是void默认也是请求响应模式,可返回服务端的错误信息 c.客户端在请求后,当前线程停止真到接受收服务器的响应 [Opereatio ...

  9. RabbitMQ之消息模式(下)

    目的: RabbitMQ之消息模式(上):https://www.cnblogs.com/huangting/p/11994539.html 消费端限流 消息的ACK与重回队列 TTL消息 死信队列 ...

  10. (三)ActiveMQ之发布- 订阅消息模式实现

    一.概念 发布者/订阅者模型支持向一个特定的消息主题发布消息.0或多个订阅者可能对接收来自特定消息主题的消息感兴趣.在这种模型下,发布者和订阅者彼此不知道对方.这种模式好比是匿名公告板.这种模式被概括 ...

随机推荐

  1. 分布式ActiveMQ集群--转载

    原文地址:http://shensy.iteye.com/blog/1752529 回顾总结前一段时间学习的ActiveMQ分布式集群相关的知识,分享出来希望对看到的人有所帮助. 一.分布式Activ ...

  2. dl-ssl.google.com

    转载:http://jingyan.baidu.com/article/64d05a02752300de55f73b99.html 搭建Android就会用到Android SDK,而安装SDK有个恶 ...

  3. 电商平台如何接入快递鸟电子面单API?

    快递鸟是全球物流接口服务商,为电商 ERP.电商平台.仓储.清关公司提供物流跟踪.电子面单.智选物流.物流金融.在线下单等服务,解决电商的物流管理模块和金融模块.现就对快递鸟电子面单API做基本描述, ...

  4. 美H1B签证额满,硕士以上学位仍可申请

    美国公民与移民服务局6月1日宣布,2007会计年度的工作签证H1B名额已经用完,下年度的申请从明年4月1日开始.但在美国获得硕士以上学位的高学历者仍可申请. 据北美世界日报报道,美国移民律师协会对连续 ...

  5. Android自定义View,高仿QQ音乐歌词滚动控件!

    最近在以QQ音乐为样板做一个手机音乐播放器,源码下篇博文放出.今天我想聊的是这个QQ音乐播放器中歌词显示控件的问题,和小伙伴们一起来探讨怎么实现这个歌词滚动的效果.OK,废话不多说,先来看看效果图: ...

  6. Android(java)学习笔记116:PC_Phone通信程序报错

    1.首先我写的程序代码如下: package com.himi.udpsend; import java.net.DatagramPacket; import java.net.DatagramSoc ...

  7. Android(java)学习笔记84:自定义异常类

    自定义异常: 考试成绩必须在0-100之间 很明显java没有对应的异常,需要我们自己来做一个异常 自定义异常 继承自Exception 继承自RuntimeException 下面是一个代码示例: ...

  8. Mysql 死锁相关操作

    该随笔随时记录日常工作中遇到的关于mysql的死锁相关问题 1)查看mysql当前的处理线程(connection) mysql> show processlist; 2)杀掉对应的connec ...

  9. 有关java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0

    时常会遇到java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0这样的异常,现在都知道是jdk版本的问 ...

  10. js实现刮刮卡效果

    <!DOCTYPE html> <html> <body> <canvas/> <script> (function(bodyStyle) ...