- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python使用thrift教程的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、前言: 。
thrift 是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 thrift 进行通信的,然后写自动化脚本之前研究了一下.
需要定义一个xxx.thrift的文件, 来生成各种语言的代码,生成之后我们的服务提供者和消费者,都需要把代码引入,服务端把代码实现,消费者直接使用api的存根,直接调用.
和 http 相比,同属于应用层,走 tcp 协议。thrift 优势在于发送同样的数据,request包 和 response包 要比 http 小很多,在整体性能上要优于 http .
2、使用方法 。
环境准备:
从官网上下载 windows 版的 thrift.exe:http://archive.apache.org/dist/thrift/0.9.3/(我这里用的是0.9.3版本) 。
python版本:python 3.7.1 。
pip3 install thrift 。
1.首先使用 thrift 之前需要定义一个 .thrift 格式的文件,比如 test.thrift 。
1
2
3
4
|
service transmit {
string saymsg(
1
:string msg);
string invoke(
1
:i32 cmd
2
:string token
3
:string data)
}
|
然后运行命令:thrift-0.9.3.exe -gen py test.thrift 生成 python 代码 。
生成如下结构 。
2.然后将生成的 python 代码 和 文件,放到新建的 python 项目中。完成后先运行服务器代码.
服务端代码 server.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import
json
from
test
import
transmit
from
test.ttypes
import
*
from
thrift.transport
import
tsocket
from
thrift.transport
import
ttransport
from
thrift.protocol
import
tbinaryprotocol
from
thrift.server
import
tserver
import
socket
class
transmithandler:
def
__init__(
self
):
self
.log
=
{}
def
saymsg(
self
, msg):
msg
=
json.loads(msg)
print
(
"saymsg("
+
msg
+
")"
)
return
"say "
+
msg
+
" from "
+
socket.gethostbyname(socket.gethostname())
def
invoke(
self
,cmd,token,data):
cmd
=
cmd
token
=
token
data
=
data
if
cmd
=
=
1
:
return
json.dumps({token:data})
else
:
return
'cmd不匹配'
if
__name__
=
=
"__main__"
:
handler
=
transmithandler()
processor
=
transmit.processor(handler)
transport
=
tsocket.tserversocket(
'127.0.0.1'
,
8000
)
tfactory
=
ttransport.tbufferedtransportfactory()
pfactory
=
tbinaryprotocol.tbinaryprotocolfactory()
server
=
tserver.tsimpleserver(processor, transport, tfactory, pfactory)
print
(
"starting python server..."
)
server.serve()
|
客户端代码 client.py 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import
sys
import
jsonfrom test
import
transmit
from
test.ttypes
import
*
from
test.constants
import
*
from
thrift
import
thrift
from
thrift.transport
import
tsocket
from
thrift.transport
import
ttransport
from
thrift.protocol
import
tbinaryprotocol
transport
=
tsocket.tsocket(
'127.0.0.1'
,
8000
)
transport
=
ttransport.tbufferedtransport(transport)
protocol
=
tbinaryprotocol.tbinaryprotocol(transport)
client
=
transmit.client(protocol)
# connect!
transport.
open
()
cmd
=
2
token
=
'1111-2222-3333-4444'
data
=
json.dumps({
"name"
:
"zhoujielun"
})
msg
=
client.invoke(cmd,token,data)
print
(msg)
transport.close()
# 执行结果:cmd不匹配
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.cnblogs.com/shenh/p/10529073.html 。
最后此篇关于python使用thrift教程的方法示例的文章就讲到这里了,如果你想了解更多关于python使用thrift教程的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 Ubuntu 10.04 LTS 机器,我在该机器上克隆了 Thrift 的 git 存储库并从源代码本地构建它。但是最新版本的 API 有一些变化,这导致应用程序的构建过程失败。 由于仅
尽管 Thrift 格式使用相对广泛(并且项目仍然存在),但我无法找到底层数据格式的规范。或格式,因为显然至少有两种格式;标准之一,紧凑的格式。 鉴于它的广泛使用,我希望它只是我可怜的 google-
每个参数(字段标识符)之前的数字的用途是什么?为什么从 5 跳到 16? struct Tweet { 1: required i32 userId; 2: required stri
我已经在 mac 中安装了 thrift。 从终端看起来 thrift 已成功安装但是当我尝试运行 thrift 命令时,我得到以下信息 Thrift: command not found 我从终端使
我在 c++ 中有一个结构,它存储这样的字节: struct RemoteData { /// some other fields here unsigned char* buf;
我想在 IDL 文件中定义几个结构。然后在服务中返回该结构类型的对象。为此,我必须导入该结构。如何在 IDL 中导入它们。 namespace java abc.xyz struct struct_{
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我使用thrift编译器(0.9.3)生成gen-go文件夹,同时编译器生成一个函数thrift.PrependError,在thrift 包(git.apache.org/thrift.git/li
假设我在包含两个字段的 Apache Thrift IDL 文件中定义了一个结构。例如: struct Thing { 1: optional string name, 2: optional
是否有可能使用 Thrift 来表示诸如 Java 类型 Map 之类的东西,其中 Map 中的值是已知的,例如是字符串还是整数? 换句话说,是否有任何方法来表示实际基类型仅在运行时已知但保证是一组预
我需要使用 Ruby 实现 Thrift API。 在生产环境中运行服务器有哪些选项? 最好的选择是什么? 目前我只是实例化一个 SimpleServer 并在其上调用 #serve。这显然是一个蹩脚
我正在查看 thirft 代码生成器的文档。它是这样开始的: Usage: thrift [options] file Options: -version Print the compile
所有教程和文档都建议每个 Thrift 服务器可以提供一项服务(1 个处理程序 1 个处理器 1 个服务器,全部在构造函数等中给出)。 从我的观点(优雅的设计)来看,如果许多或所有服务定义可以独立会更
我正在寻找 C++ 异步客户端和非阻塞 C++ 服务器实现。我在 apache 中看到一些邮件文件,但该事件是 2009 年末的。想知道最新的 thrift 是否支持它。我正在对 C++ 代码使用 c
我一直在研究使用 Apache Thrift,但发现文档有些缺乏。现在我有兴趣看到支持的目标语言以及每种语言支持的协议(protocol),是否有这样的矩阵? 最佳答案 试试这个: Thrift La
使用 C++ Apache Thrift 库,是否可以仅使用序列化/反序列化而不使用 RPC 服务? 据我了解 this页面,可以使用 Java 库来完成。但是,我找不到 C++ 库的类似类。 最佳答
Thrift 解析器有一个“注解”的定义: https://git-wip-us.apache.org/repos/asf?p=thrift.git;a=blob;f=compiler/cpp/src
我的组织设置了一个 Spark Thrift 服务器,该服务器配置为使用 HTTP 上的 SSL。目的是使 Power BI 能够通过 Spark 安全地检索数据。然而,仅仅检索架构信息可能需要长达
我正在我的 Mac 上运行一对使用 Apache Thrift 进行通信的客户端和服务器程序。在我们的生产系统中,我们可能最终会遇到客户端使用TJSONProtocol,服务端使用TBinaryPro
来自 Thrift website 的示例 int multiply(1:int n1, 2:int n2); 为什么我们必须使用标签 1:和 2:在变量名之前,这个标签的目的是什么? 最佳答案 这些
我是一名优秀的程序员,十分优秀!