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

ØMQ (也拼写作ZeroMQ0MQZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库。它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(message broker)。该库设计成常见的套接字风格的API。

ZeroMQ是由iMatix公司和大量贡献者组成的社群共同开发的。ZeroQ通过许多第三方软件支持大部分流行的编程语言 。类库提供一些套接字(对传统Berkeley套接字和Unix domain socket的泛化),每一个套接字可以代表一个端口之间的多对多连接。以消息的粒度进行操作,套接字需要使用一种消息模式(message pattern),然后专门为那种模式进行了优化。

如果说ZeroMQ最突出的三个特点是什么? 答案是 快,很快,非常快。相信如果您的单线程队列能够在几秒内完成千万级别的数据入列和出列您一定会有同样的感觉。

NetMQ 是使用c# 对ZeroMQ的实现。

闲话不说了,对于这个消息队列的介绍网上一搜一堆,我这边就讲一下具体的实现吧。

网上大部分的例子都是点对点的 发布=>订阅,我很奇怪这种需求是用在什么类型的业务上。通常消息队列的应用是 客户端发布,服务端中转,客户端接收,多对多的形式。发布端和接收端是一体的,打个简单的比喻,QQ群聊天,群成员的QQ号码,就是你订阅的主题,那么有多少个成员就订阅多少个主题。同时你自己也是发布端,同理其他成员也订阅了你的QQ号码为主题,流程就成了 你发送消息到腾讯服务器,腾讯服务器转发消息到所有的群成员QQ,此时他们是订阅方,你是发布方,反过来群成员发布消息,你也能接收,这时群成员为发布方,你为订阅方,(打个比方,借用一下腾讯的的场景而已,QQ消息的收发不是这样的。)

现在我们来看一下 Client => Server => Client 模式的实现代码

服务端:

      static void Main(string[] args)
        {
            using (var xpubSocket = new XPublisherSocket("@tcp://127.0.0.1:1234"))
            using (var xsubSocket = new XSubscriberSocket("@tcp://127.0.0.1:5678"))
            {
                var proxy = new Proxy(xsubSocket, xpubSocket);
                Task.Factory.StartNew(proxy.Start);
                Console.WriteLine("服务端启动完成。");
                Console.ReadKey();
            }
        }

客户端:

        static void Main(string[] args)
        {
            //发布服务
            PublisherSocket pubSocket = new PublisherSocket();
            pubSocket.Connect("tcp://127.0.0.1:5678");
            Console.WriteLine("连接消息发布代理服务器...\r\n");

            //订阅服务
            SubscriberSocket subSocket = new SubscriberSocket();
            subSocket.Subscribe("Topic");//订阅主题
            subSocket.Connect("tcp://127.0.0.1:1234");
            Console.WriteLine("连接消息订阅代理服务器...\r\n");        

            //发布消息
            pubSocket.SendMoreFrame("Topic").SendFrame("Hello World");
            Console.WriteLine("主题:Topic,发布消息:Hello World\r\n");

            //接收消息
            string topic = subSocket.ReceiveFrameString();
            string meassage = subSocket.ReceiveFrameString();
            Console.WriteLine(string.Format("主题:{0},订阅消息:{1}\r\n",topic,meassage));
            Console.ReadKey();
        }
    }

效果演示:

附件里是我封装的类,使用起来更方便。
附件:http://files.cnblogs.com/files/MuNet/NetMQ_Demo.rar

时间: 2024-12-10 03:49:51

NetMQ(ZeroMQ)Client => Server => Client 模式的实现的相关文章

Linux下rsync 数据镜像备份 client / server 模式

Linux下rsync 数据镜像备份 rsync特性: 可以镜像保存整个目录树和文件系统可以增量同步数据,文件传输效率高,因而同步时间很短.可以保持原有文件的权限.时间等属性.加密传输数据,保证了数据的安全性 两种模式: client / serverclient / client 安装rsync yum install rsync 查看rsync版本 rpm -qa rsyncrsync-3.1.2-4.el7.x86_64 查看rsync安装位置 rpm -ql rsync 在服务器端:编辑

Consul集群Server+Client模式

Consul集群Server+Client模式 架构示意图 只使用Consul的Server模式有以下2个问题: 因为Consul Server数量受到控制所以压力承载(扩展性)是个问题. Server很少导致一个Server下会注册很多微服务,当Server挂掉,这个Server节点下注册的微服务都会视为无效. 基于上述问题我们在架构中加入Consul Client模式,Client因为加入了LAN gossip协议组成网络中(高速局域网),可以识别故障的Server节点并找到可用的Serve

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

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

基于NIO的Client/Server程序实践

转自    http://blog.csdn.net/zhangzhaokun/article/details/6612833 本意是想看明白Zookeeper内部的代码是怎么玩的,在琢磨一段时间之后,发现还是自己先独立写一个基于NIO的C/S模式程序,看看有哪些细微之处要注意,再来跟进ZK的细节比较靠谱一些,于是乎就自己练手写了如下这段代码 ,权当预热下使用NIO来编写网络程序这一知识点了,在这里记述这段代码的目的无非是加深下自己的印象,并且后续还可以有思索和改进的空间. 基本功能:服务器端不

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

JDK/JRE/SERVER/CLIENT/JAVA/JAVAC/JAVAW等等

几个概念 一. SDK是Software Development Kit 一般指软件开发包,可以包括函数库.编译程序等. JDK是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境. JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者. 二. JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来

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

简单的Client / Server 使用 linux 伯克利 socket实现 编辑

server /* *run command: * g++ server.cpp -o server && ./server */ #ifndef SERVER #define SERVER #include<arpa/inet.h> #include<assert.h> #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<errno.h>

NIOSocket Server Client

最近在看Netty框架,顺便写了一下NIO SocketChannel服务端和客户端 Server.java import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; /** * Created by g