最近需要用到Thrift接口, 是Facebook开发的apache开源项目,公司要用,研究了一下 所以写了个PHP调用Thrift的 方法 事例 以下是代码,以免以后别人再走弯路 我是在Yii框架中实现的,和原生代码应该是一样的 官方下载包里也有PHP调用Thrift的例子
<?php /** * @author fzxa * @create 2012/05/22
Thrift推荐职位相关接口 注:详细说明文档在 \protected\components\thrift\推荐系统API.docx
@desc 说明Thrift接口数据格式: EntityType接口数据格式 enum EntityType { POSITION = 0, RESUME = 1 }
EntityInfo接口数据格式 struct EntityInfo { 1: EntityType type, 2: string id, // 实体id 3: double rank, // rank值 4: string address, // 工作地点 5: i32 salary, // 薪水 6: string industry, // 行业类别 7: string profession, // 职业类别 8: i32 workingage, // 工作年限 9: i32 degree, // 学历 10: string time, // 过期时间或更新时间 11: map<string,string> descriptions, // 文字描述,其中key为字段名,value为字段内容 12: map<string,i32> tags, // 技能标签 }
ResultInfo接口数据格式 struct ResultInfo { 1: EntityType type, 2: string id, // 实体id 3: i32 score, // 推荐分数,取值范围:[0, 100] }
*/
$GLOBALS['THRIFT_ROOT'] = $_SERVER['DOCUMENT_ROOT'].'/p/protected/components/thrift'; require_once( $GLOBALS['THRIFT_ROOT'] . '/Thrift.php' ); require_once( $GLOBALS['THRIFT_ROOT'] . '/transport/TSocket.php' ); require_once( $GLOBALS['THRIFT_ROOT'] . '/transport/TBufferedTransport.php' ); require_once( $GLOBALS['THRIFT_ROOT'] . '/protocol/TBinaryProtocol.php' );
//生成的文件 RecommendService.php require_once( $GLOBALS['THRIFT_ROOT'] . '/RecommendService.php' ); //ini_set('display_errors', E_ALL);
class ThriftInterface { private static $thriftHost = '*.*.*.*'; //Thrift接口服务器IP private static $thriftPort = 8080; //Thrift端口 /** * 建立Thrift连接 * @return boolean */ private static function client(){ $socket = new TSocket(self::$thriftHost, self::$thriftPort); $socket->setSendTimeout(10000); $socket->setRecvTimeout(20000); $transport = new TBufferedTransport($socket); $protocol = new TBinaryProtocol($transport); $client = new RecommendServiceClient($protocol); $transport->open(); $socket->setDebug(TRUE); return $client;
} /** * 获取职位推荐列表ById * * @param Number $type 0:代表职位,1:代表简历 * @param Number $id 实体ID * @param Array 推荐结果列表 * @example: $Recommend = ThriftInterface::getRecommendedResultById('1','1982'); */ public static function getRecommendedResultById($type,$id){ $client = self::client(); $ResultById = $client->getRecommendedResultById($type, $id); return $ResultById; } /** * 获取推荐列表ByEntity * @param EntityInfo $entity 职位或简历实体信息 */ public static function getRecommendedResultByEntity($entity){ $client = self::client(); $EntityInfo = new EntityInfo(); $EntityInfo->type = (string)$entity['type']; $EntityInfo->id = (string)$entity['id']; $EntityInfo->rank = (float)$entity['rank']; $EntityInfo->address = (string)$entity['address']; $EntityInfo->salary = (int)$entity['salary']; $EntityInfo->industry = (string)$entity['industry']; $EntityInfo->profession = (string)$entity['profession']; $EntityInfo->workingage = (int)$entity['workingage']; $EntityInfo->degree = (int)$entity['degree']; $EntityInfo->time = (string)$entity['time']; $EntityInfo->descriptions = (array)$entity['descriptions']; $EntityInfo->tags = (array)$entity['tags'];
$ResultByEntity = $client->getRecommendedResultByEntity($EntityInfo); return $ResultByEntity; } /** * 计算任一简历与职位的匹配分数ById * * @param Number $type1 0:代表职位,1:代表简历 * @param Number $id1 实体ID * @param Number $type2 0:代表职位,1:代表简历 * @param Number $id2 实体ID * @example Number */ public static function getRecommendedScoreById($type1, $id1, $type2, $id2){ $client = self::client(); $ScoreById = $client->getRecommendedScoreById($type1, $id1, $type2, $id2); return $ScoreById; } /** * 计算任一简历与职位的匹配分数ByEntity * * @param EntityInfo $entity 实体的所有信息 * @param EntityType $type2 * @param string $id2 实体ID2 * @return i32 简历与职位的推荐分数,取值范围:[0, 100] */ public static function getRecommendedScoreByEntity($entity, $type2, $id2){ $client = self::client(); $EntityInfo = new EntityInfo(); $EntityInfo->type = (string)$entity['type']; $EntityInfo->id = (string)$entity['id']; $EntityInfo->rank = (float)$entity['rank']; $EntityInfo->address = (string)$entity['address']; $EntityInfo->salary = (int)$entity['salary']; $EntityInfo->industry = (string)$entity['industry']; $EntityInfo->profession = (string)$entity['profession']; $EntityInfo->workingage = (int)$entity['workingage']; $EntityInfo->degree = (int)$entity['degree']; $EntityInfo->time = (string)$entity['time']; $EntityInfo->descriptions = (array)$entity['descriptions']; $EntityInfo->tags = (array)$entity['tags']; $ResultInfo = new ResultInfo(); $ResultInfo->type = (string)$type2['type']; $ResultInfo->id = (string)$type2['id']; $ResultInfo->score = (int)$type2['score']; $ScoreByEntity = $client->getRecommendedScoreByEntity($EntityInfo, $type2, $id2); return $ScoreByEntity; }
}
查看更多关于Thrift在PHP中调用的方法的详细内容...