[转]PHP 下使用 ZeroMQ 和 protobuf

本文详细介绍了如何在PHP环境下安装并使用ZeroMQ库和protobuf库,包括安装步骤、客户端使用方法及解决安装过程中遇到的问题。

FROM : http://www.68idc.cn/help/makewebs/php/20150118175432.html

前言 这个记录总的来说分两部分: 搭建环境。 简单使用教程。 搭建环境 安装 ZeroMQ 库 首先 PHP 很早之前就安装了, 所以我不想选择重新编译 PHP , 而是想用动态加载模块的方法来添加这个库。 正好 zmermq 的官网介绍的有,于是我学会了动态给php安装库。
 

前言

这个记录总的来说分两部分:

  1. 搭建环境。
  2. 简单使用教程。

搭建环境

安装 ZeroMQ 库

首先 PHP 很早之前就安装了, 所以我不想选择重新编译 PHP , 而是想用动态加载模块的方法来添加这个库。

正好 zmermq 的官网介绍的有,于是我学会了动态给php安装库。

不过安装 php 版本的 zmq 模块之前, 需要有 c++ 版本的 zmw 库。

于是先安装 c++ 版本的库。

wget http://download.zeromq.org/zeromq-4.0.5.tar.gz
tar zxvf zeromq-4.0.5.tar.gz 
cd zeromq-4.0.5.tar.gz 
./configure
make
make test
make install

安装 php ZeroMQ 模块

然后安装 php 版本的模块, 和普通安装只多了一步: phpize

下载地址在 github 上

git clone git://github.com/mkoppanen/php-zmq.git
unzip php-zmq-master.zip
cd php-zmq-master
phpize
./configure
make -B
make test
make install

Build complete 问题

# ./configure
config.status: creating config.h
config.status: config.h is unchanged
# make
Build complete.
Don't forget to run 'make test'.

这个可以看上面的两个代码的区别。

由于 make 的时候就只编译有修改的文件链, 而我们的文件什么也没有修改, 所以不会重新编译。

这个时候就要使用 make -B 强制重新编译了。

ZMQContext not found 问题

大概错误如下

Fatal error: Class 'ZMQContext' not found ( but it is installed and works on the terminal )

stackoverflow 上找到三个类似的问题 这里, 这里, 还有这里 stackoverflow3.

他们的大概结论就是配置文件的问题。

而且他们提示命令行可以正常执行的,于是我尝试在命令行试试,结果真的可以的。

php test.php
#正常输出结果

而且 他们都是强调php有两个配置文件, 一个是 命令行使用的, 一个是 apache 使用的, 但是我使用 whereis php 找到有 php 的地方, 然后去看, 只有 /etc/php.ini 这一个地方有。

# whereis php
php: /usr/bin/php /etc/php.d /etc/php.ini /usr/lib64/php /usr/include/php /usr/local/php /usr/share/php /usr/share/man/man1/php.1.gz

于是我猜想:最大的可能就是 apache 没有使用 /etc/php.ini 这个配置文件。

但是当时我想着命令行能用,就先用命令行吧。

先让整个客户端能够运行起来在说,于是我不管这个问题了。(最后还需要面对这个问题,并找到原因解决了,详见下面)

安装 protobuf 库

protobuf 在 google 的官网上没有找到 php 版本的源码, 只在 github 上找到两个, 我选择了 这个。

然后下载安装

git clone https://github.com/allegro/php-protobuf/archive/master.zip
unzip php-protobuf-master.zip
cd php-protobuf-master
phpize
./configure
make
make test
make install

然后命令行可以正常运行了。

简单实用记录

php 下 zmq 的使用

由于我只是在 php 下作为客户端链接其他地方的服务端, 这里只记录客户端的使用方法。

看下面的代码之前可以先看看之前我记录的一篇 ZMQ 简单记录。

语言是相同的,所以理解了一个语言,其他语言很快也能上手的。

// 创建环境
$context = new ZMQContext();
//创建 socket
$requester = new ZMQSocket($context, ZMQ::SOCKET_REQ);
//连接服务端, 如果是服务端,只需要改成 bind , 以及 socket 的第二个参数修改一下就行了吧。
$requester->connect("tcp://10.12.191.112:5555");
//发送数据
$requester->send("hello");
//接受数据
$ret = $requester->recv();
//处理数据
dump($ret);

php 下 protobuf 的使用

首先编写自己的协议,比如简单的登陆协议, 保存为 proto 后缀的文件,比如 test.proto .

package test; 
message api_req 
{ 
    required string    username = 1;
    required string    password = 2;
}
message api_rsp 
{ 
    required int32    ret = 1; // 0 通过验证  1 拒绝验证
    required string   err_msg = 2; //错误信息
}

然后使用 protoc-php.php 对我们的协议进行转换

这个 protoc-php.php 文件在上面我说的 github 上可以找到, ProtobufCompiler 也要下载的。

php protoc-php.php test.proto

执行完之后会输出一个 php 的文件, 里面是用 php 封装好的我们的协议类。

最后就是使用我们的协议类了。

//引入我们的头文件
require_once 'pb_proto_test.php';
//对我们的数据进行打包,并返回字符串
$req = new Test_ApiReq();
$req->setUsername($username);
$req->setPassword($password);
$packed = $req->serializeToString();
//对得到的字符串进行解包
$rsp= new Test_ApiRsp();
try {
    $rsp->parseFromString($packed);
} catch (Exception $ex) {
    die('Upss.. there is a bug in this example');
}
$ret = $rsp->getRet();
$msg = $rsp->getErrMsg();

遗留问题

最终, php 下的 zeromq 和 protobuf 都可以正常运行了, 只不过是在命令行下运行的。

然后我无意间看到有人说配置文件不对, 编译库的时候需要指定 php-config 。

于是我尝试了一下

cd php-zmq-master
/usr/local/php/bin/phpize
./configure -with-php-config=/usr/local/php/bin/php-config
make -B
make test
make install

然后浏览器中竟然没有 提示找不到 ZMQContext 了。

但是出现了新的问题, 提示: 找不到 ProtobufMessage。

于是使用相同的方法对 protobuf 进行编译。

cd php-protobuf-master
/usr/local/php/bin/phpize
./configure -with-php-config=/usr/local/php/bin/php-config
make -B
make test
make install

good, 没有提示找不到 ProtobufMessage 了。

但是提示 undefined symbol: zend_new_interned_string in Unknown on line 0 .

于是我开始大量的查询资料了。

第一个是这里 和 这里, 但是我这模块不是通过 pecl 安装的,所以无效。

但是我还是执行了 php -v 这个参数,提示我是 5.3.3 版本的 php.

然后我又在这里 和 这里, 没有解决问题。

但是它提示我查看 phpinfo 这个倒是需要做一下。

然后我发现我的 php 版本是 5.6 .

此时我意识到一个问题: 我的这台开发机上安装了有两个 php 程序。

当然,我起初搜到这里, 这里, 还有这里,还有这里,大家都说是 bug, 现在看来不是 bug 了。

解决方案

既然确定是有两个 php 版本的缘故, 那就需要先把版本保持一致再说。

于是我采用比较暴力的方法, 把 /usr/local/php/bin/ 里的文件复制一份到 /etc/bin/ 下面。

当然,覆盖前先把原先的文件备份一下。

ls /usr/local/php/bin/
pear        peardev     pecl        phar        phar.phar   php         php-cgi     php-config  phpize
cp /usr/local/php/bin/* /etc/bin/*

这样不需要指定路径再重新编译一下, 重启 apache, 浏览器访问发现可以正常返回结果了。

总结

出现这些问题了, 先确认是不是配置文件的问题, 不是了再确认是不是版本的原因。

《完》

转载于:https://www.cnblogs.com/Athrun/p/php_ZeroMQ_protobuf.html

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值