ZeroMQ-Client / Server

Request/Reply pattern

Most basic pattern is client/server model, where client sends a request and server replies to the request.

There is one difference from zmq.PAIR and other type of ZMQ sockets.

  • ZMQ REQ sockets can connect to many servers.
  • The requests will be interleaved or distributed to both the servers.

With socket zmq.PAIR, you could send any number of messages among connected peers or client/server.

  • socket zmq.REQ will block on send unless it has successfully received a reply back.
  • socket zmq.REP will block on recv unless it has received a request.

Each Request/Reply is paired and has to be successful.

#reqrep_server.py

#Provide port as command line argument to run server at two different ports.
import zmq
import time
import sys

port = "5556"
if len(sys.argv) > 1:
    port =  sys.argv[1]
    int(port)

context = zmq.Context()

#Server is created with a socket type “zmq.REP” and is bound to well known port.
socket = context.socket(zmq.REP)
socket.bind("tcp://*:%s" % port)

while True:
    #  Wait for next request from client
    #  It will block on recv() to get a request before it can send a reply.
    message = socket.recv()
    print "Received request: ", message
    time.sleep (1)  
    socket.send("World from %s" % port)
#  reqrep_client.py

#  Provide two ports of two different servers to connect to simultaneously.
import zmq
import sys

port = "5556"
if len(sys.argv) > 1:
    port =  sys.argv[1]
    int(port)

if len(sys.argv) > 2:
    port1 =  sys.argv[2]
    int(port1)

#Client is created with a socket type “zmq.REQ”. You should notice that the same socket can connect to two different servers.

context = zmq.Context()
print "Connecting to server..."
socket = context.socket(zmq.REQ)
socket.connect ("tcp://localhost:%s" % port)
if len(sys.argv) > 2:
    socket.connect ("tcp://localhost:%s" % port1)

#  You have to send a request and then wait for reply.    
#  Do 10 requests, waiting each time for a response
for request in range (1,10):
    print "Sending request ", request,"..."
    socket.send ("Hello")
    #  Get the reply.
    message = socket.recv()
    print "Received reply ", request, "[", message, "]"
#  Executing the scripts:
python reqrep_server.py 5546
python reqrep_server.py 5556
python reqrep_client.py 5546 5556

#  Output:

#  server-1
(D:\anaconda) C:\Users\admin\Desktop\opt>python reqrep_server.py 5546
Received request:  Hello
Received request:  Hello
Received request:  Hello
Received request:  Hello
Received request:  Hello

#  server-2
(D:\anaconda) C:\Users\admin\Desktop\opt>python reqrep_server.py 5556
Received request:  Hello
Received request:  Hello
Received request:  Hello
Received request:  Hello

#  client
(D:\anaconda) C:\Users\admin\Desktop\opt>python reqrep_client.py 5546 5556
Connecting to server...
Sending request  1 ...
Received reply  1 [ World from 5546 ]
Sending request  2 ...
Received reply  2 [ World from 5556 ]
Sending request  3 ...
Received reply  3 [ World from 5546 ]
Sending request  4 ...
Received reply  4 [ World from 5556 ]
Sending request  5 ...
Received reply  5 [ World from 5546 ]
Sending request  6 ...
Received reply  6 [ World from 5556 ]
Sending request  7 ...
Received reply  7 [ World from 5546 ]
Sending request  8 ...
Received reply  8 [ World from 5556 ]
Sending request  9 ...
Received reply  9 [ World from 5546 ]
时间: 2024-12-28 12:04:21

ZeroMQ-Client / Server的相关文章

NetMQ(ZeroMQ)Client => Server => Client 模式的实现

ØMQ (也拼写作ZeroMQ,0MQ或ZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库.它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(message broker).该库设计成常见的套接字风格的API. ZeroMQ是由iMatix公司和大量贡献者组成的社群共同开发的.ZeroQ通过许多第三方软件支持大部分流行的编程语言 .类库提供一些套接字(对传统Berkeley套接字和Unix domain socket的泛化),每一个套接字可

QDjango,tufao,C++ websocket client/server

QDjango, a Qt-based C++ web frameworkhttps://github.com/jlaine/qdjango/ An asynchronous web framework for C++ built on top of Qt http://vinipsmaker.github.io/tufao/https://github.com/vinipsmaker/tufao C++ websocket client/server library http://www.za

《Python Network Programming Cookbook》读书笔记1---套接字, IPv4, 简单的Client/Server程序

这一部分主要介绍python中socket模块的相关内容,socket即套接字. socket是使用TCP/IP协议的应用程序通常采用的应用编程接口,它位于运输层和应用层之间,起源于UNIX,由于遵从UNIX“一切皆文件的”思想故socket可看作一种特殊的文件,对其的操作基本可以视为读写I/O.打开.关闭.关于套接字的基本概念@吴秦的Linux Socket编程(不限Linux)写的很详细,大家可以参考. 在下面列出的各个部分中我将先贴出代码,然后对其进行解释. 通过python3获得本机名和

Network client/server (二)

接上篇 Network client/server (一) server.c 1  header files #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> heade

Client–server model

Client–server model From Wikipedia, the free encyclopedia The client–server model of computing is a distributed application structure that partitions tasks or workloads between the providers of a resource or service, called servers, and service reque

Linux SocketCan client server demo hacking

/*********************************************************************** * Linux SocketCan client server demo hacking * 说明: * 本文主要是解读Linux上的SocketCan的基本使用方法,内容和Linux上的 * 网络编程差不多. * * 2016-3-28 深圳 南山平山村 曾剑锋 ********************************************

Netty:一种非易失堵塞client/server相框

Netty:一种非易失堵塞client/server相框 作者:chszs.转载需注明.博客主页:http://blog.csdn.net/chszs Netty是一个异步事件驱动的网络应用框架,为Java网络应用的开发带来了一些新活力.Netty由协议server和client所组成.可用于高速开发可维护的高性能软件.Netty应用框架及其工具简化了网络编程,并且由Netty社区进行维护. Netty还被归类为NIOclient/server框架.用它能够高速.简易地开发网络应用.使得TCP和

Java Client/Server 基础知识

Java的网络类库支持多种Internet协议,包括Telnet, FTP 和HTTP (WWW),与此相对应的Java网络类库的子类库为:  Java.net  Java.net.ftp  Java.net.www.content  Java.net.www.html  Java.net.www.http  这些子类库各自容纳了可用于处理Internet协议的类和方法.其中,java.net用于处理一些基本的网络功能,包括远程登录(Telnet):java.net.ftp用于处理ftp协议:j

Android—Camera Client/Server的binder IPC机制

本文首先参考Android Binder IPC分析一文分析了Android Binder IPC通信机制过程及涉及到的各个子元素相关概念,从代码细节脱离出来,因而整体上把握Android binder IPC通信机制,是能够理解文章最后Camera Framework进程间通信实现的基础.参考Android 4.4版本源码. Binder通信概述 Android进程间通信(Inter-Process Communication, IPC)采用binder通信机制,是一种client/serve

DTLS协议中client/server的认证过程和密钥协商过程

我的总结:DTLS的握手就是协商出一个对称加密的秘钥(每个客户端的秘钥都会不一样),之后的通信就要这个秘钥进行加密通信.协商的过程要么使用非对称加密算法进行签名校验身份,要么通过客户端和服务器各自存对方信息进行对比校验身份. 1.DTLS介绍 1.1 DTLS的作用 互联网先驱们最开始在设计互联网协议时主要考虑的是可用性,安全性是没有考虑在其中的,所以传输层的TCP.UDP协议本身都不具备安全性.SSL/TLS协议是基于TCP socket,利用加密.基于数字证书的身份验证等机制在传输层和应用层