thrift 调取 python php go 客户端代码

golang

package main

import (
    "fmt"
    "git.apache.org/thrift.git/lib/go/thrift"
    "net"
    "thriftproxy"
    "time"
)

type ThriftClient struct {
    client    *thriftproxy.ThriftProxyClient
    transport *thrift.TSocket
}

func (c *ThriftClient) NewThriftClient() {
    //thrift
    transportFactory := thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())
    protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
    var er error
    c.transport, er = thrift.NewTSocket(net.JoinHostPort(thrift_host, thrift_port))
    c.transport.SetTimeout(TIMEOUT * time.Second)
    if er != nil {
        panic(fmt.Sprintf("error resolving address:%v", er))
    }
    useTransport := transportFactory.GetTransport(c.transport)
    c.client = thriftproxy.NewThriftProxyClientFactory(useTransport, protocolFactory)
    if err := c.transport.Open(); err != nil {
        panic(fmt.Sprintf("Error opening socket:%v", err))
    }

}
func (c *ThriftClient) Close() {
    c.transport.Close()
}
    thriftclient := new(ThriftClient)
    thriftclient.NewThriftClient()
    defer thriftclient.Close()

    detailRequest := new(se.DetailRequest)
    detailRequest.HotelId =178236
r, err = thriftclient.client.SearchDetailRtsSync(detailRequest)

php

?php  
    header ( "Content-type: text/html; charset=utf-8" );
    $GLOBALS['THRIFT_ROOT'] =dirname(__FILE__). '/Thrift';   
    require_once dirname(__FILE__).'/Thrift.php';  
    require_once $GLOBALS['THRIFT_ROOT'].'/Protocol/TBinaryProtocol.php';  
    require_once $GLOBALS['THRIFT_ROOT'].'/Transport/TSocket.php';  
    require_once $GLOBALS['THRIFT_ROOT'].'/Transport/THttpClient.php';  
    require_once $GLOBALS['THRIFT_ROOT'].'/Transport/TBufferedTransport.php';  
    require_once $GLOBALS['THRIFT_ROOT'].'/Transport/TFramedTransport.php';  
    require_once $GLOBALS['THRIFT_ROOT'].'/Type/TType.php'; 
    require_once $GLOBALS['THRIFT_ROOT'].'/Type/TMessageType.php'; 
    require_once $GLOBALS['THRIFT_ROOT'].'/Factory/TStringFuncFactory.php'; 
    require_once $GLOBALS['THRIFT_ROOT'].'/StringFunc/TStringFunc.php';
    require_once $GLOBALS['THRIFT_ROOT'].'/StringFunc/Core.php';
    require_once $GLOBALS['THRIFT_ROOT'].'/Base/TBase.php';
    require_once $GLOBALS['THRIFT_ROOT'].'/Exception/TException.php';
    require_once $GLOBALS['THRIFT_ROOT'].'/Exception/TProtocolException.php';
    require_once $GLOBALS['THRIFT_ROOT'].'/Exception/TTransportException.php';
    require_once $GLOBALS['THRIFT_ROOT'].'/Exception/TApplicationException.php';
    //error_reporting(E_NONE);  

    $GEN_DIR = './gen-php';  
    require_once $GEN_DIR.'/ThriftProxy.php';  
    require_once $GEN_DIR.'/Types.php'; 
    error_reporting(E_ALL);  
   
    $socket = new Thrift\Transport\TSocket('127.0.0.1', 5101);  
    $socket->setDebug(true);
    // 设置接收超时(毫秒)  
    $socket->setSendTimeout(10000);
    $socket->setRecvTimeout(20000);
    $transport = new Thrift\Transport\TFramedTransport($socket);//支持的数据传输方式 取决于服务器端的使用模式 和服务器的设置一样 
    $protocol = new Thrift\Protocol\TBinaryProtocol($transport);  //支持的传输格式 选择传输层,这块要和服务器的设置一样 
    $client = new ThriftProxyClient($protocol);  
   
    $transport->open();  
    try{  
        $ListRequest=new ListRequest();
        $ListRequest->check_in_date=  strtotime('2014-07-20');
        $ListRequest->check_out_date=strtotime('2014-07-21');
        $ListRequest->region_;
        $ListRequest->rank_type=RankType::PRICEASC;
        $ListRequest->hotel_star=array(HotelStarType::STAR4,HotelStarType::STAR3);

        $PageInfo=new PageInfo();
        $PageInfo->page_no=1;
        $PageInfo->page_size=50;
        $ListRequest->page_info=$PageInfo;
        
        $a = $client->SearchList($ListRequest);  
        var_dump($a);  
    } catch (TException $tx) {  
        print 'TException: '.$tx->getMessage()."/n";  
    }
    $transport->close();  
?>

python

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys 
sys.path.append('gen-py')
sys.path.append('thrift') 
from thriftproxy import ThriftProxy   
from se.ttypes import *

from thrift import Thrift 
from thrift.transport import TSocket 
from thrift.transport import TTransport 
from thrift.protocol import TBinaryProtocol
import time

try: 
    socket = TSocket.TSocket('127.0.0.1', 5101)
    transport = TTransport.TFramedTransport(socket)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
                        
    client = ThriftProxy.Client(protocol) 
    transport.open()
    
    request=ListRequest()
    request.check_in_date=time.time()+86400
    request.check_out_date=time.time()+86400*2
    request.region_id=178236
    response = client.SearchList(request) 
    print response
    
    transport.close()
        
except Thrift.TException, tx: 
    print "%s" % (tx.message)