ThriftPy is a pure python implementation of Apache Thrift in a pythonic way.
环境及版本
1 | 【Server、Client】 |
简单Server & Client
Thriftpy的使用和Thrift类似,用两台Ubuntu分别做Server和Client,实现跨机器通信
Server
1 | #!/usr/bin/env python |
Client
1 | #!/usr/bin/env python |
Service Conf
方法注册文件以.thrif为后缀,Server与Client都必须有,文件目录可以指定
1 | service RPCTest { |
Thrift支持的数据类型Thriftpy里都支持
- 基本数据类型(Java为准)
类型 | 说明 |
---|---|
bool(boolean) | 布尔类型(TRUE or FALSE) |
byte(byte) | 8位带符号整数 |
i16(short) | 16位带符号整数 |
i32(int) | 32位带符号整数 |
i64(long) | 64位带符号整数 |
double(double) | 64位浮点数 |
string(String) | 采用UTF-8编码的字符串 |
- 复合数据类型(Java为准)
类型 | 说明 |
---|---|
list(java.util.ArrayList) | 列表 |
set(java.util.HashSet) | 集合 |
map(java.util.HashMap) | 键值对 |
- 特殊数据类型(Java为准)
类型 | 说明 |
---|---|
binary(ByteBuffer) | 未经过编码的字节流 |
struct(结构体) | 定义了一个很普通的OOP对象,但是没有继承特性 |
复合、特殊数据、基本数据类型可以嵌套使用
RPC传输文件
这里我采用Base64进行编码与解码,将文件从Client传向Server
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
Server 接收文件
1 | #!/usr/bin/env python |
Client 发送文件
1 | #!/usr/bin/env python |
Service Conf
1 | service FileRPC { |
转载请注明出处