您的位置:首页 > 编程语言 > PHP开发

无废话 Thrift 之 Hello World( PHP 版).

2016-06-22 16:33 615 查看
Thrift 不再介绍。体验一把 PHP 的Server , PHP 的Client。

0.安装,装备环境,不表,运行 thrift -version 看到版本就行。

1.写 HelloThrift.thrift .

这个是个标准文本,里面只有一个sayHello 方法。

namespace php HelloThrift

service HelloService {
string sayHello(1:string username)
}


通过 thrift -r --gen php:server HelloThrift.thrift 命令会在当前目录下生成一个 gen-php 。为了方便改名为 gen_php 。注意划线。

2.把 thrift 的 lib文件夹 拷到项目的根下

3.写服务端。Server.php

<?php
namespace HelloThrift\php;

error_reporting(E_ALL);

require_once __DIR__.'/lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php';
use Thrift\ClassLoader\ThriftClassLoader;

$GEN_DIR = realpath(dirname(__FILE__)).'/gen_php';
$loader = new ThriftClassLoader();
$loader->registerNamespace('Thrift',__DIR__.'/lib/php/lib');
$loader->registerDefinition('HelloThrift',$GEN_DIR);
$loader->register();

if (php_sapi_name() == 'cli') {
ini_set('display_errors',"stderr");
}

use Thrift\Protocol\TBinaryProtocol;
use Thrift\Transport\TPhpStream;
use Thrift\Transport\TBufferedTransport;

class HelloHandler implements \HelloThrift\HelloServiceIf {

public function sayHello($username)
{
return "Hello ".$username;
}
}

header('Content-Type','application/x-thrift');
if (php_sapi_name() == 'cli') {
echo PHP_EOL;
}

$handler = new HelloHandler();
$processor = new \HelloThrift\HelloServiceProcessor($handler);

$transport = new TBufferedTransport(new TPhpStream(TPhpStream::MODE_R | TPhpStream::MODE_W));
$protocol = new TBinaryProtocol($transport,true,true);

$transport->open();
$processor->process($protocol,$protocol);
$transport->close();


服务器的只有一个sayHello 方法。在require 时注意一下文件路径。

4.写客户端。Client.php

<?php
namespace  HelloThrift\php;

error_reporting(E_ALL);
require_once __DIR__.'/lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php';
use Thrift\ClassLoader\ThriftClassLoader;

$GEN_DIR = realpath(dirname(__FILE__)).'/gen_php';
$loader = new ThriftClassLoader();
$loader->registerNamespace('Thrift',__DIR__.'/lib/php/lib');
$loader->registerDefinition('HelloThrift',$GEN_DIR);
$loader->register();

use Thrift\Protocol\TBinaryProtocol;
use Thrift\Transport\TSocket;
use Thrift\Transport\THttpClient;
use Thrift\Transport\TBufferedTransport;
use Thrift\Exception\TException;

try {
if (array_search('--http',$argv)) {
$socket = new THttpClient('localhost',8080,'/Server.php');
} else {
$socket = new TSocket('localhost',9090);
}

$transport = new TBufferedTransport($socket,1024,1024);
$protocol  = new TBinaryProtocol($transport);
$client = new \HelloThrift\HelloServiceClient($protocol);

$transport->open();

echo $client->sayHello(" World! ");

$transport->close();
} catch (\Exception $e) {
print 'TException:'.$e->getMessage().PHP_EOL;
}


里面也只调用一次 sayHello 方法。

5.运行服务。在项目的根下运行命令 php -S localhost:8080

6.运行客户端进行测试。直接使用 php Client --http 命令。可以看到 Hello World! 成功。

7.文件夹结构如下:



8: 整个项目文件打包。

好象我没有上传权限,算了,自己写的文件代码全在上面了。其他的是 thrift 自己生成的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: