狠狠撸

狠狠撸Share a Scribd company logo
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
谢谢

More Related Content

窜别谤辞惭蚕介绍

  • 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

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n