当前位置: 首页 > 配置 > 正文

php-thrift新项目部署中一个小问题的分享

 

之前某项目的一个,主要是他们用到了thrift这个扩展;

当时这个扩展在线上环境还没有大规模部署,于是把出现的一些问题总结分享给大家。

1.首先是下载源码,一开始就犯了个错误,把源码直接编译了,但是一般会报错,研究了很久也没解决,最后才发现,扩展方式安装只需要编译源码的一小部分。

 
cd /usr/local/thrift-0.8.0/lib/php/src/ext/thrift_protocol

/usr/local/php5/bin/phpize

./configure --enable-thrift_protocol --with-php-config=/usr/local/php5/bin/php-config

检查/usr/local/php5/lib/php.ini 中是否包含:Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/和thrift_protocol.so

编辑php.ini加入extension=thrift_protocol.so,reload PHP即可。

写一个phpinfo可以看到一个标有版本1.0的thrift扩展模块。

 

2.之后遇到的一个问题就真的很让人郁闷。QA环境都是好好的一个项目,线上环境基本都配置好之后,研发跑来反映说网络不通。用ping,telnet,curl手动检查后端机器都正常,上机器查看日志发现,错误日志显示无法连接到后端接口,而这个部分正是调用thrift扩展。于是调大超时的设置,但是观察到几乎是鼠标点下按钮错误就出现了,不是后端超时造成。之后研发写了一个简单的调用thrift的页面,我们一直把注意力放在了一些路径的处理上,然后不断的修改和调试也没有发现根本原因。

最后,在线上和QA环境对比发现,有区别的基本只有PHP版本和代码的配置文件,QA环境的配置文件都是写死的IP,而线上为了推广标准化域名,用了这样的写法:

//dan server
'ServUrl' => 'Http://xxx.cn',
'ServPort' => '8080',

同样,另外一个接口也是这样的域名,在另一个兄弟的提醒下,我们把域名换为IP,错误消失,然后去掉域名前的http://,服务也是正常的。问题原因找到:Thrift本身定义了一些传输协议,并不能和http协议兼容,所以用http 1.1方式的调用因为协议不同会立刻产生错误。

网上找了个简介:Thrift实际上是实现了C/S模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在Thirft描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提服务)便可以了。其中protocol(协议层, 定义数据传输格式,可以为二进制或者XML等)和transport(传输层,定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库。

本文固定链接: https://www.cornercat.org/2013/05/php-thrift%e6%96%b0%e9%a1%b9%e7%9b%ae%e9%83%a8%e7%bd%b2%e4%b8%ad%e4%b8%80%e4%b8%aa%e5%b0%8f%e9%97%ae%e9%a2%98%e7%9a%84%e5%88%86%e4%ba%ab/ | 墙角的小猫's Blog

该日志由 cornercat 于2013年05月03日发表在 配置 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: php-thrift新项目部署中一个小问题的分享 | 墙角的小猫's Blog
关键字: , ,

php-thrift新项目部署中一个小问题的分享:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter
欢迎光临~
柚子