- 浏览: 367161 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
abc08010051:
结果呢?烂尾跑路了?
关于actor模型的优缺点分析(1) -
qinhanlei:
hi, 感谢分享,受益匪浅! 顺便请问一下,您使用的是什么绘图 ...
skynet任务调度分析 -
maxer025:
楼主,github 地址?
WebIM第一版本及下一步工作 -
boyhailong:
博主的分析能力真是强 skynet的很多东西我表示还是看不太懂 ...
skynet任务调度分析 -
ranweizheng:
亲这篇里面没有说当(.class 元素 元素) 与( .cla ...
css样式表中的样式覆盖顺序
zeroMQ,又称0MQ,是一个非常简单的通信库,它扩展了传统BSD socket能力,提供简单的基于消息的通信。zeroMQ不解析消息体,没有序列化能力,或者说你可以使用任何第三方序列化库比如google的protocol buffer。
iMatix公司,AMQP协议的制定者,在2010年退出了AMQP工作组,其CEO Pieter Hintjens 认为AMQP从根本上就有不可修改的缺陷,太复杂了,目前转而支持zeroMQ,iMatix 2011年后不再维护其AMQP软件OpenAMQP。
在zeroMQ的guide中,将现在(将来)的软件类比人类的大脑,几万亿个神经元互相之间发送消息来完成一些任务,没有控制点,没有单点故障。而现实中,软件和软件间的互联极难,非常难以维护和控制。IETF已经建立了很多标准,用来解决这个问题,HTTP是一个非常简单的解决方案,但是这个解决方案让问题更加复杂:HTTP鼓励开发者和架构师将软件设计为复杂、万能的中心服务器和简陋、愚蠢的客户端。这造成了现在整个互联网到处是中心点,难以控制,即使有分布式的P2P架构(skype,bittorrent),也只是些玩具,很少有人使用它们来传输数据,解决实际生产问题。
OK,实践实践。按照guide上的说明,下面使用zeroMQ做一个简单的helloworld分布式程序。
首先安装zeroMQ,从网站上下载当前release版本,然后编译安装,需要g++和uuid-dev(在俺的亚马逊ec2虚拟机上没有,现yum安装,汗。。。)。编译出来的动静态库和头文件默认都放到了/usr/local目录下的lib和include目录下。
server代码:
#include <zmq.h> #include <stdio.h> #include <string.h> int main() { void *context = zmq_init(1); void *s = zmq_socket(context, ZMQ_REP); zmq_bind(s, "tcp://*:5555"); while (1) { zmq_msg_t msg; zmq_msg_init(&msg); zmq_recv(s, &msg, 0); printf("received hello\n"); zmq_msg_close(&msg); zmq_msg_init_size(&msg, 5); memcpy(zmq_msg_data(&msg), "World", 5); zmq_send(s, &msg, 0); zmq_msg_close(&msg); } zmq_close(s); zmq_term(context); }
client代码:
#include <stdio.h> #include <string.h> #include <zmq.h> int main() { void *ctx = zmq_init(1); void *s = zmq_socket(ctx, ZMQ_REQ); zmq_msg_t msg; char buf[10]; zmq_connect(s, "tcp://localhost:5555"); zmq_msg_init_size(&msg, 5); memcpy(zmq_msg_data(&msg), "hello", 5); zmq_send(s, &msg, 0); zmq_msg_close(&msg); zmq_msg_init(&msg); zmq_recv(s, &msg, 0); memcpy(buf, zmq_msg_data(&msg), 5); buf[5] = 0; printf("%s\n", buf); zmq_msg_close(&msg); zmq_close(s); zmq_term(ctx); return 0; }
Makefile:
all: server client server: server.c gcc -o $@ $< -lzmq client: client.c gcc -o $@ $< -lzmq
ok,测试通过。解释一下,客户端和服务端都是首先初始化一个zmq的context,然后创建一个socket,客户端创建request类型的,服务端创建reply类型的,服务端bind一个地址,客户端connect这个地址,然后客户端发送一个消息,服务端收到后回应一个消息。
可以看到如下几点:
0. zeroMQ就是一个通信库,提供创建socket,建立连接,监听端口,发送消息,接收消息的功能。
1. 使用类似URL的字符串方式指定一个地址,远远比BSD socket的sockaddr好用。
2. context创建时可以指定有多少个I/O线程,可以并发进行多个线程处理
3. 对于string,不假定有'\0'结束符,便于多种语言进行交互
4. 对于消息内容,zeroMQ不做任何解析,就是一段长度的字节流,编解码由客户端和服务端自己搞定
5. 最后很有趣的一点,先启动客户端,再启动服务端,程序照样运行正常,说明在建立连接时,如果被连接的服务端不存在,客户端会等待并尝试重连。这一点对分布式系统的容错性比较有意义。
先到这里,后续深入分析。
发表评论
-
go语言
2012-09-06 01:23 2057从学校里开始,一直是C语言的狂热支持者,刚开始工作的两年也一 ... -
关于actor模型的优缺点分析(1)
2012-08-16 07:06 15322actor model是1973年就提出 ... -
jQuery.post获取不到中文数据的问题
2012-05-13 23:10 2369PHP直接返回页面时,可以返回中文数据,但使用jQuery.p ... -
json解析
2012-05-13 20:47 2222哈哈,如果返回http消息 ... -
css样式表中的样式覆盖顺序
2012-05-13 15:42 17378刚才写zenktodo的时候, ... -
ucore-project5: mm(4)
2012-01-09 00:31 1496时隔近20天,终于搞定了一个问题。使用linker scrip ... -
ucore-project5: linker script
2011-12-22 00:00 1496要对内核进行页映射, ... -
ucore-project5:mm(3)
2011-12-21 23:29 1136paging由x86 cpu控制寄存器中的三个bit控制: ... -
ucore-project5: mm(2)
2011-12-20 00:27 1323看内核刚进入时加载临时gdt的代码: lgdt __gdtd ... -
ucore-project5: mm(1)
2011-12-19 01:30 1393project5到project9主要处理内存管理。 ... -
ucore-project4: 内核态和用户态切换(3)
2011-12-18 15:16 1918这是内核态和用户态切换的最后一篇,也是project4的最后一 ... -
ucore-project4: 内核态和用户态切换(2)
2011-12-18 13:14 2119用户态到内核态切换相对比较简单。用户态切换到内核态时,需要切换 ... -
ucore-project4: 内核态和用户态切换(1)
2011-12-18 12:24 3550终于又回来了。内核态 ... -
ucore-project4: interrupt--x86 cpu复习
2011-12-11 20:04 1440离上次更新ucore工程已经过去6天了。这几天工作比较忙,经常 ... -
ucore-project4: interrupt -- 搞定第一个中断:timer
2011-12-05 23:56 1731修改了代码中的一个bug,时钟终端终于正常了。 pro ... -
ucore-project4: interrupt
2011-12-05 07:55 1483中断处理程序总算调进去了,刚才调试主要有两个问题: 1. o ... -
电路图
2011-12-04 00:46 1312刚才在看怎样初始化时钟芯片8253。cpu通过执行out指令, ... -
我的操作系统的方向
2011-12-03 11:14 1254做操作系统到底是为了什么呢? 好玩,当然是一个很重要的 ... -
ucore-project4: interrupt -- 内嵌汇编在-Os优化时出错分析
2011-11-28 02:54 2871为了打印数字,将printf ... -
宇宙如何运行
2011-11-27 13:13 1089刚刚看一个科普节目:how the universe work ...
相关推荐
# 基于C++和ZeroMQ的分布式系统中间件 ## 项目简介 本项目是一个基于C++和ZeroMQ的分布式系统中间件,旨在提供高效、可靠的通信和数据处理能力。项目集成了多种中间件组件,包括RingBuffer、ThreadPool、...
ZeroMQ(零消息队列)是一种轻量级的消息中间件,它提供了一种高效、灵活的网络通信机制,能够简化分布式系统的设计和实现。 在本文中,蒲凤平和陈建政探讨了如何利用ZeroMQ构建小型分布式系统,以提高数据传输效率...
ZeroMQ可以轻松地构建分布式系统,支持点对点、广播和多播等多种通信模型。其强大的网络抽象能力使得开发者可以快速构建复杂的分布式应用,而无需担心网络拓扑和消息路由的问题。 **6. 应用场景** ZeroMQ被广泛...
在现代信息技术领域,分布式系统已经成为处理大规模数据和复杂计算任务的重要手段。而ZeroMQ(又称0MQ、ZMQ)作为一个高性能、轻量级的消息中间件,为构建这样的系统提供了强大的支持。本文将深入探讨如何利用ZeroMQ...
7. **Kubernetes(K8s)**:虽然不是Python库,但Kubernetes是目前最流行的容器编排系统,可以通过Python API与之交互,用于管理和部署分布式系统中的容器化应用。 8. **Flask** 和 **Django**:Python的Web框架,...
zeromq是一个高性能、轻量级的消息队列中间件,它的设计目标是简化分布式系统中的消息传递。在本文中,我们将深入探讨zeromq的核心特性、工作原理、使用场景以及如何在实际项目中应用。 首先,zeromq的中文名称为...
总之,ZeroMQ是一个强大、灵活且高效的开源消息通讯中间件库,它简化了分布式系统的开发,提供了丰富的API,具有出色的并发性能和消息传输特性。无论是构建大型的分布式应用还是优化微服务架构,ZeroMQ都是一个值得...
ZeroMQ,通常缩写为ZMQ或0MQ,是一个开源的消息中间件库,它提供了一种灵活高效的方式来构建分布式系统。ØMQ的核心理念是提供一个轻量级的、高性能的、模式化的通信框架,使应用程序可以像使用socket一样简单地进行...
"ZEROmq实例" 这个标题表明我们关注的是ZeroMQ技术的一个具体应用实例,ZeroMQ是一个开源的消息中间件,它提供了一种高效、灵活的框架来处理分布式系统中的消息传递。 **描述解析:** 描述提到“简单的zeromq的...
在现代分布式系统中,消息中间件(Message Queue, MQ)扮演着至关重要的角色,它们用于在分布式组件之间传输消息,帮助解决网络延迟、组件故障等问题,提高系统的整体健壮性和可扩展性。本文将详细比较Kafka、...
ZeroMQ的核心理念是提供一个轻量级的、分布式的消息传递模型,允许应用程序构建复杂的分布式系统。在4.3.2这个版本中,它继续优化了性能和稳定性,为开发者提供了更多功能和改进。 ZeroMQ的主要特点包括: 1. **轻...
无论是构建大规模的分布式系统,还是在本地多进程间进行快速数据交换,它都能提供一个简洁且高效的解决方案。通过阅读提供的资源,如readme.txt,开发者可以更好地理解这个版本的特性,并将其成功集成到他们的项目中...
《ZeroMQ Guide》这本书详细介绍了如何使用 ZeroMQ 构建高效、可靠的分布式系统。书中涵盖了以下几个关键部分: 1. **基础概念**:介绍 ZeroMQ 的基本原理,包括它的架构、工作模式以及与传统消息队列的区别。 2. ...
ZeroMQ的设计目标是简化分布式系统中的通信问题,使得开发者可以像在单机环境中一样简单地进行多进程通信。这个压缩包文件"zeromq-3.2.3"可能是ZeroMQ的3.2.3版本源码或二进制库,包含了用于构建和使用ZeroMQ的必要...
**零MQ(ZeroMQ)** 是一款开源的消息中间件,它提供了一种高效、灵活的异步消息传递机制,广泛应用于分布式系统中的组件通信。在Java环境中,ZeroMQ可以通过Java API进行操作,使得开发者能够方便地构建高并发、...
中间件技术是实现分布式系统中异构系统间透明访问的核心技术,它屏蔽了不同硬件环境、操作系统和编程语言的差异,确保软件模块在分布式系统中可以即插即用。中间件的出现使得系统各部分能够在物理上分散、逻辑上统一...
总而言之,ZeroMQ 4.2.0是一个经过验证的、适用于Linux环境的高性能消息中间件,它的强大功能和灵活性使其成为开发分布式系统的首选工具之一。通过解压并编译zeromq-4.2.0.tar.gz,开发者可以深入理解其工作原理,并...
ZeroMQ是一种轻量级的消息中间件,它提供了一种高效、灵活且可扩展的网络通信框架,使得分布式系统中的进程间通信变得简单。在Java环境中,为了利用ZeroMQ的功能,通常需要通过Java绑定来实现,这就是所谓的“ZeroMQ...
在实际应用中,ZeroMQ可以用于构建分布式系统、微服务架构、高性能网络应用,或者是作为其他组件的底层消息传输机制。通过它的高效通信机制,开发者可以构建出响应快速、扩展性强的应用程序。 综上所述,ZeroMQ...
通过学习和掌握ZeroMQ,开发者可以构建出高效、可靠的分布式系统,尤其是在云环境中,它能帮助我们构建出具有弹性、可扩展性的应用程序,提高系统的整体性能和稳定性。阅读《ZeroMQ-云时代极速消息通信库》这本书,...