moponphp/thrift

mopon泰久php项目组 thrift 通信类

Installs: 27

Dependents: 1

Suggesters: 0

Security: 0

Type:project

1.1.4 2017-03-22 07:47 UTC

This package is not auto-updated.

Last update: 2024-03-25 13:54:38 UTC


README

version 1.1.4 是个什么东西: thrift(http://thrift.apache.org/) 是由 Facebook 主导开发的一个跨平台、支持多语言的,通过定义 IDL (接口定义语言)文件,自动生成 RPC 客户端与服务端通信代码的工具,

	类似的还有	: Protobuf和Avro http://blog.csdn.net/onlyforcloud/article/details/49589191   ,
					http://baike.baidu.com/link?url=0apYi7T4riipmkdp4cCJU91zLfMsoLLTCpCfrMeIYgL5eUqfhgrVpyICrD9qaCqyPhG0RByvl_Ldm7wbyCbUlK
	RPC			: RPC(Remote Procedure Call Protocol)——远程过程调用协议
	特点			: 其传输数据采用二进制格式,相对 XML 和 JSON 体积更小,对于高并发、大数据量和多语言的环境更有优势
	协议			: http://elf8848.iteye.com/blog/1960131
		Server 服务模型
		Handler 数据处理接口
		Processor 数据处理对象
		Protocol 数据传输协议
		Transport 数据传输方式
	语法			: http://thrift.apache.org/docs/idl
	 1.支持的变量类型
		类型			描述  
		bool			#true, false  
		byte			#8位的有符号整数  
		i16				#16位的有符号整数  
		i32				#32位的有符号整数  
		i64				#64位的有符号整数  
		double			#64位的浮点数  
		string			#UTF-8编码的字符串  
		binary			#字符数组  
		struct			#结构体  
		list<type>		#有序的元素列表,类似于STL的vector  
		set<type>		#无序的不重复元素集,类似于STL的set  
		map<type1,type2>	#key-value型的映射,类似于STL的map  
		exception		#是一个继承于本地语言的exception基类  
		service			#服务包含多个函数接口(纯虚函数)  
	 2 定义一个Thrift的IDL文件 HelloWorld.thrift
		namespace php Services.HelloWorld
		service HelloWorld
		{
			string sayHello(1:string name);
		}  
	 3 编译接口文件
		thrift -gen php HelloWorld.thrift
	  

怎么用:

1 编写thrift接口定义文件(IDL定义文件) 
	安装 thrift (http://thrift.apache.org/download)
		git clone https://git-wip-us.apache.org/repos/asf/thrift.git thrift
		cd thrift
		 #sudo ./configure && sudo make && sudo make install 
		./bootstrap.sh 
		./configure --prefix=/usr/local/thrift --with-ruby=no --with-erlang=no --with-java=no --with-csharp=no --enable-gen-java=no --enable-gen-csharp=no --enable-gen-rb=no --enable-gen-erl=no
		make
		make install
	IDL 文件中定义类名字和类的方法 (实例  比如: api.thrift )  
                                                            namespace php moponphp.thrift.api
                                                            service Api 
                                                            {
                                                                    string runAction(1:string r,2:map<string,string> params);
                                                            }
		https://github.com/zekunyan/ThriftDemo_PHP_CPP					 Thrift interface definition		
		http://blog.csdn.net/heiyeshuwu/article/details/5982222			 二、IDL描述
		http://www.cnblogs.com/weiqubo/archive/2011/03/21/1989845.html   IDL详解
	编译 idl文件  生成文件夹  
		thrift -r --gen php:server api.thrift		
		会生成  ./gen-php/moponphp/thrift/api文件夹
				Api.php		定义了 ApiIf,ApiClient
				Types.php			定义了数据传入类型
2 编辑php 或其他语言的代码、
		需要引入的文件: 
			1,库文件  http://thrift.apache.org/lib/php   安装包的 lib/php/目录下  默认安装位于   /usr/lib/php/Thrift/  
			2,接口定义文件 上例举例 Api.php,Types.php
		客户端 构建 Types.php中的数据(如果有) 将这些数据 通过 client对象发送这些数据到服务器 
		服务器 编写handler文件 handler实现ldIf 接口 实现接口中定义的那些方, 封装编写启动或注册服务代码
		注意:  ldIf,handler,client,processor都是 编写的名字加这个字段形成的类名 比如: HelloWorldIf,HelloWorldClient,HelloWorHandler
				其实用不着每个类都写成一个servers,只要定义一个其他的都从这一个接口过去然后做分流就可以了 
3 部署
	服务器代码实例: 
		1. 创建Handler	(具体类和方法的实现代码,Handler类必须实现 ldIf类 比如: class HelloWorldHandler implements HelloWorldIf{} )
		2. 基于Handler创建 Processor(数据处理对象,脚本自动生成的文件中包含这个类)
		3. 创建Transport(通信方式 比如:TSocket:采用TCP Socket进行数据传输,THttpTransport:采用Http传输协议进行数据传输)
		4. 创建Protocol方式(设定传输格式 比如:TBinaryProtocol – 二进制格式,TCompactProtocol – 压缩格式,TJSONProtocol – JSON格式)
		5. 基于Processor, Transport和Protocol创建Server (详见lib/Server/*)
		6. 运行Server
	启动服务器: 
		
	客户端 
		1. 创建Transport
		2. 创建Protocol方式
		3. 基于Transport和Protocol创建Client
		4. 运行Client的方法

摘自:

  https://github.com/zekunyan/ThriftDemo_PHP_CPP/blob/master/PHP/client.php   官网原生实例 
  http://www.nonb.cn/blog/thrift-in-php.html		Thrift在PHP中调用的方法

http://www.tuicool.com/articles/NV3Yni3 RPC框架Thrift例子-PHP调用C++后端程序

	  https://github.com/zekunyan/ThriftDemo_PHP_CPP    git实例 php客户端 c++服务器
  http://blog.csdn.net/heiyeshuwu/article/details/5982222		thrift 轻松实现多语言跨服务器通信  py服务器 php客户端 
  https://my.oschina.net/penngo/blog/496992 					thrift php服务器端开发
  https://github.com/walkor/workerman-thrift 扩展  workerman-thrift-rpc
  http://www.yiiframework.com/extension/thriftclient/#hh2   yii1.0 thriftclient的封装  

moponphp/thrift 使用方法 1 配置文件添加组件:

    'thrift' => [
        'class' => 'moponphp\thrift\Connection',

// 'transport'=>'TSocket', #类型 // 'hostname' => '127.0.0.1',
// 'port' => 9090,

        'path' => '/act/wwwapi/web/index.php?r=thrift/runaction'        #路径transport= TPhpStream 会用到这个参数  
    ],

2 服务器端添加控制器并添加一个方法 写入以下代码 (这个控制器也就是配置文件中的path)

         Yii::$app->thrift->regService("Api");
        return Yii::$app->thrift->serviceParseOnes();  

3 在相应的位置调用客户端中的方法 (注: api是服务名 runaction 是服务的方法名 )

 Yii::$app->thrift->api->runaction();

备注: 还可以设置为TSocket 模式 服务器端 需要在命令行初始化服务 Yii::$app->thrift->initServices();