`

关于消息队列——ZeroMQ的安装

 
阅读更多

ZeroMQ —— The Intelligent Transport Layer (智能的传输层封装)


1,与其说它可嵌入的网络库,不如说是一个并发的socket框架
2,集群上使用比TCP快速
3,消息通过inpro,IPC,TCP以及广播方式传输
4,通过fanout(扇出),pubsub,pipeline,request-reply实现多对多通信
5,异步IO
6,活跃社区支持
7,拥有30多种语言的扩展库
8,支持window,linux,os x等系统
9,LGPL许可

 

安装过程如下:

下载源码zeromq-3.2.2.tar.gz编译安装,然后安装php扩展

git clone git://github.com/mkoppanen/php-zmq.git
phpize
./configure --with-php-config=/root/bin/php-config
make && make install

编辑php.ini 添加 extension=zmq.so

 

编程参考手册 http://php.zero.mq

这里有大量程序示例可供参考https://github.com/imatix/zguide

 

A,request/reply

 

写一个服务端 server.php

<?php
/*
* Hello World server
* Binds REP socket to tcp://*:5555
* Expects "Hello" from client, replies with "World"
* @author Ian Barber <ian(dot)barber(at)gmail(dot)com>
*/

$context = new ZMQContext(1);

$responder = new ZMQSocket($context, ZMQ::SOCKET_REP);
$responder->bind("tcp://*:5555");

while (true) {
// Wait for next request from client
$request = $responder->recv();
printf ("Received request: [%s]\n", $request);

// Do some 'work'
sleep (1);

// Send reply back to client
$responder->send("World");
}

写一个客户端client.php

<?php

//allocate a new context
$context = new ZMQContext();

//create a new socket
$queue = $context->getSocket(ZMQ::SOCKET_REQ,"mysock");

//connect the server
$queue->connect("tcp://127.0.0.1:5555");

//send and receive message
var_dump($queue->send("Hello, using mysock")->recv());

?>

 一个简单的服务应答就搭建好了,支持并发。可以开启多个client.php去连接服务器端测试。这是简单的request-reply,下面看看如何实现pub/sub(发布/订阅)

 

B,publish/subscribe

 

发布端 publisher.php

<?php

// Prepare our context and publisher
$context = new ZMQContext();
$publisher = $context->getSocket(ZMQ::SOCKET_PUB);
$publisher->bind("tcp://127.0.0.1:5556");

while (true) {

    $filter = mt_rand(1, 9);

    // Send message to all subscribers
    $update = sprintf ("%d Hello%d", $filter, $filter);
    $publisher->send($update);
    usleep(100000);
}

?>

订阅端 subscriber.php

<?php

$context = new ZMQContext();

// Socket to talk to server
echo "Subscribe message from server...", PHP_EOL;
$subscriber = new ZMQSocket($context, ZMQ::SOCKET_SUB);
$subscriber->connect("tcp://127.0.0.1:5556");

// Subscribe to 1 or other channel
$filter = $_SERVER['argc'] > 1 ? $_SERVER['argv'][1] : "1";
$subscriber->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE, $filter);

// Process 100 updates
$total_temp = 0;
while(true) {
    $string = $subscriber->recv();
    sscanf ($string, "%d %s", $filter, $msg);
    echo "$filter recv $msg\n";
}

?>

 运行一个publisher.php端,然后启动多个subscriber.php
a, php subscriber.php 1 (能收到$filter=1的所有消息)
b, php subscriber.php 1 (能收到$filter=1的所有消息)
c, php subscriber.php 3 (能收到$filter=3的所有消息)

分享到:
评论

相关推荐

    c++的消息中间件zeromq

    **零MQ(ZeroMQ)**,也常写作0MQ,是一种高效、轻量级的消息队列中间件,它被广泛赞誉为史上最强大的消息中间件。它的核心特性在于能够在极低的延迟下——如30微秒内——完成消息的传递,这种极致的性能使其在实时...

    ZeroMQ指导

    管家模式为服务器提供了一种方式,通过它管理消息队列,以确保消息不会丢失,并且可以按顺序地被处理。 #### 异步管家婆模式 异步管家婆模式通过异步操作,减少对服务器的直接请求,从而提升消息处理的效率和可靠...

    ZeroMQ指导(目录完整版) 不要积分

    ZeroMQ是一个高度灵活的消息队列库,它为开发人员提供了构建高性能分布式软件的能力。本指导手册将涵盖ZeroMQ的核心概念、特性以及实践中的应用技巧。 #### 第一章 —— 基础的东西 - **修理这个世界**:这部分...

    exchange-rates-0mq:在货币兑换变化案例研究中使用 ZeroMQ 实现消息队列

    《使用ZeroMQ实现在货币兑换变化中的消息队列——以Java为例》 在现代金融系统中,实时货币汇率的变化是至关重要的数据。为了处理这些实时更新,并确保信息的有效传递,消息队列技术扮演了关键角色。本文将深入探讨...

    The ZeroMQ Guide - for C Developers

    《ZeroMQ指南——面向C开发者的指南》是Pieter Hintjens所著的一本专为C程序员设计的书籍,旨在深入介绍ZeroMQ这一强大的、轻量级的消息队列库。ZeroMQ,通常简称为ØMQ,它提供了一种高效、灵活的通信模式,允许...

    zeromq java实例程序

    零MQ(ZeroMQ)是一种高性能、轻量级的消息中间件,它提供了消息队列和网络通信的抽象,使得开发者能够方便地构建分布式应用。在Java环境中,我们可以使用JeroMQ库来与ZeroMQ进行交互,这是一个Java绑定版本,无需...

    ActiveMQ实战——实现一个简易版的聊天室

    - **消息队列**:ActiveMQ的核心就是消息队列,它允许应用程序之间通过发送和接收消息进行通信,而无需直接调用对方。 - **生产者与消费者**:在聊天室场景中,用户发送的消息由生产者创建并发布到队列,而其他...

    zeromq和protobuf的c++示例代码适合初学者快速了解,上手

    zeromQ是一个高性能的消息队列系统,而protobuf则是一种数据序列化协议,常用于数据存储和网络通信。这里我们将深入探讨这两个库以及它们在C++中的使用。 首先,zeromQ(又称0MQ或ZeroMQ)是一个轻量级的消息...

    swift-ZeroMQforSwift

    - **故障恢复**: 提供高可用性和容错机制,如临时故障的自动重连和消息队列,确保消息不丢失。 **2. Swift中的ZeroMQ实现** Zewo是一家致力于为Swift提供现代、简洁的开源库的组织,他们提供了ZeroMQ的Swift绑定...

    asio-zmq:为ZeroMQ提供BOOSTASIO接口

    【asio-zmq】是一个开源项目,其主要目的是为流行的分布式消息中间件库——ZeroMQ提供一个基于Boost.ASIO的接口。Boost.ASIO是Boost库的一部分,它为C++程序员提供了一种处理异步I/O操作的强大工具,如网络通信、...

    libzmq-4.3.2编译的类库

    1. **消息队列模式**:ZeroMQ提供了一种基于消息队列的通信模型,支持多种消息模式,如请求/响应、发布/订阅、推送/拉取等,简化了分布式系统中的数据交互。 2. **高性能**:ZeroMQ设计的目标之一就是高性能,它...

    zmq-async:ZeroMQ 的线程安全 Clojure core.async 接口

    然而,ZeroMQ 套接字不是线程安全的——并发使用通常需要显式锁定或专用线程和队列。 该库为您处理所有这些,获取您的 ZeroMQ 套接字并将它们隐藏在线程安全的 core.async 通道之后。 | | | | 快速开始 添加到您的...

    Python-zeroRPCzerorpc是一个灵活的RPC实现基于ZeroMQ和MessagePack

    2. **ZeroMQ**:ZeroMQ(又称0MQ、零MQ)是一个轻量级的消息队列库,它提供了一种套接字风格的API,支持多种通信模式,如PUB/SUB(发布/订阅)、REQ/REP(请求/响应)、PUSH/PULL(推/拉)等。ZeroMQ不仅提供了高效...

    详解Python 实现 ZeroMQ 的三种基本工作模式

    ZeroMQ是一个强大的消息队列库,它提供了一种简单、高效的网络通信机制。它不是传统的消息队列服务器,而是一个封装了Socket API的库,让编程变得更加简单。 首先,我们来看第一种工作模式:Request-Reply模式。...

    Zguide文档中文翻译

    ### 消息队列及其设计模式——《Zguide文档中文翻译》解读 #### 一、ZeroMQ基础 **基础知识:** ZeroMQ是一个高度灵活的消息队列库,它提供了多种通信模式,包括请求-应答(Request-Reply)、发布-订阅(Publish-...

    whiteboard-server:使用ZeroMQ启动和运行分布式系统的中央节点的代码

    ZeroMQ并非传统的消息队列,而是一种“虚拟传输层”,它提供了多种消息模式,如发布/订阅(Publish/Subscribe)、请求/响应(Request/Reply)以及推拉(Push/Pull)模式,这些模式可以轻松地适应不同的应用场景。...

    C#下可用的NetMQ.dll和ProtoBuf.dll

    首先,NetMQ(原名ZeroMQ)是一个高度可定制的网络通信框架,它提供了一种轻量级的消息队列模型,适用于分布式计算和微服务架构。NetMQ.dll是这个开源库的.NET版本,允许C#开发者充分利用ZeroMQ的强大功能。NetMQ的...

    MQ选型之RabbitMQ

    #### 一、MQ与消息队列概念解析 MQ,即消息队列(Message Queue),是一种应用程序间通信方法,通过消息的存储与转发来实现组件间的解耦。队列可以被形象地理解为一种数据结构,它遵循先进先出(FIFO)原则。消息队列...

    PyPI 官网下载 | pyzmq-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl

    pyzmq,全称ZeroMQ(零消息队列),是一个跨平台的、开源的消息传递库,它提供了基于消息队列的高级通信模式,如发布/订阅、请求/响应等。pyzmq是Python对ZeroMQ的绑定,使得Python开发者能充分利用ZeroMQ的强大功能...

    Storm资源库

    3. **zeromq-2.1.7.zip**: ZeroMQ(也称为0MQ)是一个高性能的消息队列库,它提供了一种轻量级的、跨平台的通信机制。在Storm中,ZeroMQ被用来在worker节点之间传输消息,构建微消息总线,支持Storm的并行处理和...

Global site tag (gtag.js) - Google Analytics