无废话 Thrift 之 Hello World( PHP 版).
2016-06-22 16:33
615 查看
Thrift 不再介绍。体验一把 PHP 的Server , PHP 的Client。
0.安装,装备环境,不表,运行 thrift -version 看到版本就行。
1.写 HelloThrift.thrift .
这个是个标准文本,里面只有一个sayHello 方法。
通过 thrift -r --gen php:server HelloThrift.thrift 命令会在当前目录下生成一个 gen-php 。为了方便改名为 gen_php 。注意划线。
2.把 thrift 的 lib文件夹 拷到项目的根下
3.写服务端。Server.php
服务器的只有一个sayHello 方法。在require 时注意一下文件路径。
4.写客户端。Client.php
里面也只调用一次 sayHello 方法。
5.运行服务。在项目的根下运行命令 php -S localhost:8080
6.运行客户端进行测试。直接使用 php Client --http 命令。可以看到 Hello World! 成功。
7.文件夹结构如下:
![](https://images2015.cnblogs.com/blog/302/201606/302-20160622162607875-54093755.png)
8: 整个项目文件打包。
好象我没有上传权限,算了,自己写的文件代码全在上面了。其他的是 thrift 自己生成的。
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.文件夹结构如下:
![](https://images2015.cnblogs.com/blog/302/201606/302-20160622162607875-54093755.png)
8: 整个项目文件打包。
好象我没有上传权限,算了,自己写的文件代码全在上面了。其他的是 thrift 自己生成的。
相关文章推荐
- echo 中使用逗号和点号的区别
- [基础常识]阿里云ecs从购买到环境搭建和建站!!(phpstudy一件包)
- php in_array性能优化
- Yii错误404页面
- php取得变量的类型 php判断数据类型
- Win7 IIS7应用PHP Manager使用FastCGI通道快速部署PHP支持
- MyISAM和InnoDB区别
- PDO事务处理预处理
- 编译安装php扩展fileinfo
- php无限分类
- 为ZendStudio增加CodeIgniter的智能提\
- 一台服务器配主从
- 事务产生的脏读幻读不可重复读
- 接口安全
- php 扩展dll
- response 删除thinkphp版权标记
- 单向散列加密,对称加密,非对称加密
- 使用phpexcel解析Excel数据表并存储到数据库中全过程_PHP_thinkphp_cmf
- PHP魔术方法及其基本含义
- 第三方登录