ZeroMQ(ØMQ)简介
  高效的并发、   步通信框架
什么是 ØMQ
•   ØMQ 看起来是一个网络库,实际是一个并发框架。

•   它提供的 Socket,支持在进程内、进程间、或通过TCP、组播传递,提供以一
    条完整消息为单位的传输接口。

•   你可以用不同模式进行N:N的连接,这些模式包括fanout、pub-sub、任务分发
    和请求响应。

•   它非常快,可以胜任构建集群产品的工作。

•   它的   步模型可以让你的应用 步处理消息,利用多处理器架构的并发能
    力。

•   它提供了多 语言的API,并可以运行在大多数的操作系统上。

•   ØMQ由iMatrix 发,并在LGPL许可下     源。
                            译自官方文档 zguide 的“ØMQ in a Hundred Words”
                       http://zguide.zeromq.org/page:all#-MQ-in-a-Hundred-Words
ZMQ 与 Thrift, Protobuf
•   ZMQ 是底层传输库

    •   ZMQ 解决 1:N 乃至 N:N的高效通信

    •   ZMQ 支持 PUSH/PULL, PUB/SUB, REQ/REP 等模式

    •   ZMQ 不解决序列化问题

•   Thrift 是序列化 + 跨语言通信库

    •   Thrift 支持跨语言的    杂数据结构的序列化与反序列化

    •   Thrift 的底层传输(Protocol)是可插拔的

    •   Thrift 的底层传输是以 RPC 的点到点通信为主的

•   有尝试在 Thrift 下面,用 ZMQ 作为传输 Protocol 的,但更多的用法是和 Protobuf
    混用
ZMQ 中的模式




       类繁多的玩法
简洁的代码(一)
•   N:N PUSH/PULL 模
    型,数据源


•   先初始化一个zmq
    socket

•   用这个socket连接所有
    worker

•   生成任务、发送消息
简洁的代码(二)
•   N:N PUSH/PULL 模
    型,接收端


•   初始化一个zmq socket


•   bind 从命令行得到的字
    符串


•   接收消息,干活
运行上述代码
•   编译
            gcc -o zsource -lzmq p_source.c
            gcc -o zsink -lzmq p_sink.c

•   启动接收进程
            ./zsink tcp://*:5001 > log.1 &
            ./zsink tcp://*:5002 > log.2 &
            ./zsink tcp://*:5003 > log.3 &

•       始发送
    ./zsource   1   tcp://localhost:5001   tcp://localhost:5002   tcp://localhost:5003   &
    ./zsource   2   tcp://localhost:5001   tcp://localhost:5002   tcp://localhost:5003   &
    ./zsource   3   tcp://localhost:5001   tcp://localhost:5002   tcp://localhost:5003   &
    ./zsource   4   tcp://localhost:5001   tcp://localhost:5002   tcp://localhost:5003   &
参考
• 官方文档(zguide): http://
  zguide.zeromq.org/page:all
• Github 仓库: https://github.com/zeromq/
  zeromq2-x
• 云风的介绍: http://blog.codingnow.com/
  2011/02/zeromq_message_patterns.html
谢谢

ZeroMQ简介

  • 1.
  • 2.
    什么是 ØMQ • ØMQ 看起来是一个网络库,实际是一个并发框架。 • 它提供的 Socket,支持在进程内、进程间、或通过TCP、组播传递,提供以一 条完整消息为单位的传输接口。 • 你可以用不同模式进行N:N的连接,这些模式包括fanout、pub-sub、任务分发 和请求响应。 • 它非常快,可以胜任构建集群产品的工作。 • 它的 步模型可以让你的应用 步处理消息,利用多处理器架构的并发能 力。 • 它提供了多 语言的API,并可以运行在大多数的操作系统上。 • ØMQ由iMatrix 发,并在LGPL许可下 源。 译自官方文档 zguide 的“ØMQ in a Hundred Words” http://zguide.zeromq.org/page:all#-MQ-in-a-Hundred-Words
  • 3.
    ZMQ 与 Thrift,Protobuf • ZMQ 是底层传输库 • ZMQ 解决 1:N 乃至 N:N的高效通信 • ZMQ 支持 PUSH/PULL, PUB/SUB, REQ/REP 等模式 • ZMQ 不解决序列化问题 • Thrift 是序列化 + 跨语言通信库 • Thrift 支持跨语言的 杂数据结构的序列化与反序列化 • Thrift 的底层传输(Protocol)是可插拔的 • Thrift 的底层传输是以 RPC 的点到点通信为主的 • 有尝试在 Thrift 下面,用 ZMQ 作为传输 Protocol 的,但更多的用法是和 Protobuf 混用
  • 4.
    ZMQ 中的模式 类繁多的玩法
  • 5.
    简洁的代码(一) • N:N PUSH/PULL 模 型,数据源 • 先初始化一个zmq socket • 用这个socket连接所有 worker • 生成任务、发送消息
  • 6.
    简洁的代码(二) • N:N PUSH/PULL 模 型,接收端 • 初始化一个zmq socket • bind 从命令行得到的字 符串 • 接收消息,干活
  • 7.
    运行上述代码 • 编译 gcc -o zsource -lzmq p_source.c gcc -o zsink -lzmq p_sink.c • 启动接收进程 ./zsink tcp://*:5001 > log.1 & ./zsink tcp://*:5002 > log.2 & ./zsink tcp://*:5003 > log.3 & • 始发送 ./zsource 1 tcp://localhost:5001 tcp://localhost:5002 tcp://localhost:5003 & ./zsource 2 tcp://localhost:5001 tcp://localhost:5002 tcp://localhost:5003 & ./zsource 3 tcp://localhost:5001 tcp://localhost:5002 tcp://localhost:5003 & ./zsource 4 tcp://localhost:5001 tcp://localhost:5002 tcp://localhost:5003 &
  • 8.
    参考 • 官方文档(zguide): http:// zguide.zeromq.org/page:all • Github 仓库: https://github.com/zeromq/ zeromq2-x • 云风的介绍: http://blog.codingnow.com/ 2011/02/zeromq_message_patterns.html
  • 9.

Editor's Notes