Heim  >  Artikel  >  php教程  >  zeromq linux 安装+实例

zeromq linux 安装+实例

WBOY
WBOYOriginal
2016-06-06 20:11:061542Durchsuche

ZMQ是什么? 这是个类似于Socket的一系列接口,他跟Socket的区别是:普通的socket是端到端的(1:1的关 系),而ZMQ却是可以N:M 的关系,人们对BSD套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错

ZMQ是什么?

这是个类似于Socket的一系列接口,他跟Socket的区别是:普通的socket是端到端的(1:1的关 系),而ZMQ却是可以N:M 的关系,人们对BSD套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而ZMQ屏 蔽了这些细节,让你的网络编程更为简单。ZMQ用于node与node间的通信,node可以是主机或者是进程。

引用官方的说法: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是 “成为标准网络协议栈的一部分,之后进入Linux内核”。现在还未看到它们的成功。但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD套接 字之上的一 层封装。ZMQ让编写高性能网络应用程序极为简单和有趣。”

以下记录一下在linux安装mq并且配置实例的过程。

cd /data/software/
wget http://download.zeromq.org/zeromq-3.2.4.tar.gz
cd /data/src
tar zxf ../software/zeromq-3.2.4.tar.gz
cd zeromq-3.2.4
./configure
make && make install
yum -y install git
cd /data/src
git clone git://github.com/mkoppanen/php-zmq.git
cd php-zmq
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

然后
vi /etc/php.ini 加上

extension = "zmq.so"

重启php,可以在phpinfo页面查看是否已经正确安装了zmq模块:

1 zeromq linux 安装+实例

到这里已经安装完成。剩下的就是开启server端和client端的测试的事情了。
比如: 我在server端,有这样一个simple-server.php

<?php /*
The server waits for messages from the client
and echoes back the received message
*/
$server = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REP);
$server->bind("tcp://127.0.0.1:5555");  //这里的IP号和端口号分别对应本机的IP号和任意一个没在用的端口号
//client连接server的时候,必须填上跟这里一致的IP号和端口号,才会执行该脚本的内容。
/* Loop receiving and echoing back */
while ($message = $server->recv()) {
echo "Got message: $message\n";
/* echo back the message */
$server->send($message);
}

client端有这样一个程序:client.php

<?php /*
The client sends two messages using two different sockets
and then exits
*/
$imgname = $_GET['imgname'];
/* Create new queue object */
$queue = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ, "MySock1"); //这里的MySock1必须是唯一的,也就是说有别的client的话,要换成另外的不同的名字,不然会有问题。
$queue->connect("tcp://127.0.0.1:5555");//这里的ip和端口号必须和相应的server的一致
/* Assign socket 1 to the queue, send and receive */
var_dump($queue->send($imgname)->recv());

zeromq可以跨平台、跨语言,高并发的处理效率也不错,是不错的socket编程的一种方案!

Tips: 如果出现连不上server的情况,请在浏览器打开simple-server.php。 貌似可能和第一次用的时候的初始化有关。

参考资料:

http://zeromq.org/bindings:php

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn