三、实践
2. zeromq mdp(Majordomo Protocol)模式测试
说明:
1) zeromq mdp模式大家可以到zeromq官网的guide自己学习,不在此处赘述。
不过mdp模式的结构还是要提一下,具体如下图:
2) 测试环境说明(默认您已经安装了zmq库和czmq库,已经php增加了zmq组件。)
根据mdp模式的架构,分成三部分:
a) client:php实现
b) broker:C实现
c) worker:C实现
客户端代码:mdclient.php
版权说明: 此代码是ZMQ官网测试代码,可能做了一点修改;
在此处就不将所有代码贴出来了,其实都是zmq官网上的测试代码,经过一些简单的修改;
如果哪位同学有需要,或测试过程中遇到什么困难,可以直接评论,我们一起讨论。
运行说明:此处默认您已经为php安装了zmq插件,详细情况请参考上一篇博客《环境搭建》;
<?php /* * Majordomo Protocol client example * Uses the mdcli API to hide all MDP aspects * * @author Ian Barber <ian(dot)barber(at)gmail(dot)com> */ include_once 'mdcliapi.php'; $verbose = $_SERVER['argc'] > 1 && $_SERVER['argv'][1] == '-v'; $session = new MDCli("tcp://localhost:5555", $verbose); for ($count = 0; $count < 10; $count++) { $request = new Zmsg(); $request->body_set("Hello world from php client"); $reply = $session->send("echo", $request); if (!$reply) { break; // Interrupt or failure } } printf ("%d requests/replies processed", $count); echo PHP_EOL; ?>
测试结果(client):
测试结果(broker):
测试结果(worker):
测试结果分析:
1)从client(php)发送字符串“Hello world from php client”;
2)经过broker路由(broker没有打开调试开关,所以看不到打印过程);
3)最终发送到worker。
测试过程遇到的问题:
上面的示例是client仅发送,没有接收。如果使用mdclient2.php那套代码测试,worker和broker使用c,且发送多帧数据时,你会发现client解析会出现错误。经排查这是由于php client在接收时少解析一个帧。
四、总结
【linux + lighttpd + php + zeromq】这套架构,从环境搭建,到两个小例子测试都已经完成。相信如果自己实践过的同学,应该算入门了。如果想将此架构应用到实际的项目中,可能还有不少路要走。希望遇到问题的同学,能在此博客一起讨论,交流。
没有目标或梦想的生活很可怕,很无聊!
你明天的生活,是由你今天决定的!