zmq 模式 ROUTER和DEALER 的实例
(1)对于Request类型的socket,它是同步的,它一个时刻只能对一个连接进行操作,在一个连接上发送了数据之后,必须接着在这个连接上执行recv,也就是send与recv必须同时匹配出现
(2)Response类型的socket也是同步的,与Request的意思差不多,不过顺序是先recv再send
(3)Router类型的socket是异步的,他可以在随时执行recv与send,而不必在同一时刻必须要强制在某个连接上进行操作,它会根据标志帧来具体的区分应该在哪一个链接上进行操作
(4)Dealer类型的socket,这个更简单的,异步。。。它基本上就没做啥工作。
ROUTER和DEALER模式
DEALER就像是一个异步的REQ,而ROUTER就像一个异步的REP。所以可以相互使用。
ROUTER做代理可以提供可靠的模式来分别识别客户端和后端服务器。
大部分的关键字都是可以相互之间建立新的模式或者组合新的模式。
这些只是基础的模式,根据需求可以设计自己需要的模式。
ROUTER担任代理
graph LR
clientA-->ROUTER1(接收客户端消息)
clientB-->ROUTER1
clientC-->ROUTER1ROUTER2-->DEALER(服务端连接)-->workerA -->ROUTER2
ROUTER2-->DEALER(服务端连接)-->workerB -->ROUTER2
ROUTER2-->DEALER(服务端连接)-->workerC -->ROUTER2 ROUTER1-->clientA (客户端的连接 将服务端处理完接收到的消息发送给客户端)
ROUTER1-->clientB
ROUTER1-->clientCROUTER1和ROUTER2在轮询,交互消息 例子中 frontend 和 backend 就是这两个连接
ROUTER1(绑定客户端)作用:接收客户端消息 服务端处理完 将信息返回给客户端
ROUTER2(绑定服务端)作用:绑定服务端的DEALER连接 来做数据交互
DEALER (接收服务端ROUTER2转发的数据 处理之后 返回给ROUTER2)
异步的交互消息 N:M
例子:
转发消息
ROUTER fontend 6001 (与客户端连接,接收客户端消息,将服务端处理完的消息返回给客户端)
ROUTER backend 6002(与服务端连接,转发给服务器消息,并接收服务端处理完的消息)
worker (处理消息)
DEALER 6002 (连接6002 接收转发的消息并处理 返回给6002连接)
中间处理的代码
import zmq
context = zmq.Context()
frontend = context.socket(zmq.ROUTER)
frontend.bind(“tcp://*:6001”)
backend = context.socket(zmq.ROUTER)
backend.bind("tcp://*:6002")
frontend.setsockopt(zmq.RCVHWM, 100)
# backend.setsockopt(zmq.SNDHWM, 1)workers_list = OrderedDict()
clients_list = {}
poller = zmq.Poller()poller.register(backend, zmq.POLLIN)
poller.register(frontend, zmq.POLLIN)
clients_list = {} #记录客户端的连接信息
while True:socks = dict(poller.poll(1000)) #轮询处理if (backend in socks and socks[backend] == zmq.POLLIN):worker_addr,client_addr,reply = backend.recv_multipart() #接受服务器处理完的信息 带地址workers_list[worker_addr]=1 #记录worker的地址if client_addr in clients_list: #服务端处理完客户端的消息 frontend.send_multipart([client_addr, reply]) #客户端将服务端处理完的消息返回给客户端else:pass #没有这个客户端 做一些记录if len(workers_list) > 0:if (frontend in socks and socks[frontend] == zmq.POLLIN):client_addr,request = frontend.recv_multipart() #接收客户端的信息 包含客户端地址clients_list[client_addr] = 1 #记录客户端的连接地址worker_id = workers_list.popitem(False)[0] #记录 idbackend.send_multipart([worker_id,client_addr,request]) #转发客户端的消息和id地址 让服务端处理
服务端代码
import zmq
context = zmq.Context()
responser = context.socket(zmq.DEALER)
responser.setsockopt(zmq.RCVTIMEO, 10000)
responser.connect("tcp://localhost:6002")
while True:ident, message = response_socket.recv_multipart()pass_response = "1" #处理完的数据response_socket.send_multipart([ident, _response])
zmq 模式 ROUTER和DEALER 的实例相关推荐
- zmq系列--Router和Dealer模式
大概意思: 这两种模式是对请求应答模式的扩展,一般的请求应答模式是同步的,服务端发送了数据,要等到客户端接收到数据后再发送回服务端才可以. 而这个新模式是异步的,不需要等到客户端返回数据,就可以继续发 ...
- 手把手教你应用三种工厂模式在SpringIOC中创建对象实例【案例详解】
目录 一.工厂模式介绍 二.通过静态工厂方法创建Bean实例 三.通过实例工厂方法创建Bean实例 四.通过自定义的factoryBean来创建bean对象 Hello,你好呀,我是灰小猿!一个超会写 ...
- C# EF Core 简单工厂模式,接口多继承实例(三)
一.说明 1.本实例是基于.Net Core 1.1,EF Core 1.1的代码实例,仅供参考 2.当前版本的EF Core好像还没有提供模型验证,异常跟踪等 二.实体层,自动 生成 三 .接口层 ...
- ZMQ模式详解——发布/订阅模式
一个例子 1.一个服务器负责生成天气相关数据(邮编.温度.湿度),然后将这些数据发布到所有需要知悉天气的客户端: 2.一个客户端需要时刻更新和获取最新的邮政编码,在没有获取之前可默认为纽约地区. ## ...
- python文件对象提供了3个读方法、分别是-Python读写文件模式和文件对象方法实例详解...
本文实例讲述了Python读写文件模式和文件对象方法.分享给大家供大家参考,具体如下: 一. 读写文件模式 利用open() 读写文件时,将会返回一个 file 对象,其基本语法格式如: open ( ...
- 单件模式的两个简单实例
计数器功能 实际用途 : 网站访问量的统计: 代码 : /// /// whs /// 声明一个单件模式的对话类 /// 注意的事项 /// 1 构造函数必须是所有的. /// 2 创建实例的函数必须 ...
- php设计一个盒子类代码_PHP设计模式之备忘录模式(Memento)代码实例大全(25)...
目的[1] 它提供了在不破坏封装(对象不需要具有返回当前状态的函数)的情况下恢复到之前状态(使用回滚)或者获取对象的内部状态. 备忘录模式使用 3 个类来实现:Originator,Caretaker ...
- 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例
文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...
- php openssl支持的加密算法和加密模式及加密解密示范实例
<style> textarea{width:88%;height:188px;} </style><?php // 定义要加密的数据 $data = '我是中文@Thi ...
最新文章
- Git 最全命令总结都在这里了
- 025_Excel知识汇总
- python从入门到放弃系列恶搞短片-太惨!学Python方法用错,直接从入门到放弃!...
- spring boot创建多模块聚合工程
- 【原】Python基础-函数
- 2021年春季学期期末统一考试 金融统计分析 试题(开卷)
- 排序算法(二)--堆排序(JAVA)
- jQuery 学习-DOM篇(一):jQuery 创建元素并添加属性
- Chip Probe(CP)测试
- A*算法之野人传教士问题 python解法
- focal loss详解
- 视频转GIF+GIF录制
- 食物相克表食物最佳搭配
- 流体力学基础——流体静力学
- 2012年08月20日
- 电子巡更系统服务器,一种基于iBeacon技术的电子巡更系统技术方案
- matlab 云图标尺输出,ANSYS应力云图怎么输出结果云图?
- 老乡鸡冲刺“中式快餐第一股“:净利掉队、扩张受阻,能借IPO起飞?
- U盘插入电脑提示需要格式化
- 华容一中高考2021成绩查询,高考放榜后 华容一中的这两个老师开心地笑了……...
热门文章
- 北京大学数据科学计算机科学与技术,北大考博辅导:北京大学数据科学(计算机科学与技术)考博难度解析及经验分享...
- 什么是命名空间,为什么要使用命名空间?
- Turbine聚合监控
- 安徽省16个地级市行政区划 (2023)
- python中demo什么意思_python中demo是什么
- C语言案例教学设计论文,【教学设计论文】C语言中冒泡排序算法教学设计(共2525字)...
- Tomcat 虚拟主机案例
- android Region 类介绍
- 书中自有黄金屋,书中自有颜如玉
- 大家挤破脑袋都想进的腾讯,你为什么想要辞职?