thrift文档

thrift 公共类库使用

1, 编写 thrift.thrift文件


/*
thrift接口定义文件
say接口接收一个参数msg,返回数值类型
body接口接收3个参数,返回字符串类型
*/
service HelloService {
    i32 say(
        1:string msg);
    string body(
    	1:i32 id 
    	2:string name 
    	3:i32 age)
}

2, 执行指令

thrift  --gen py hello.thrift

3, 服务端----------------------通过端口和 ip地址来进行链接-------------------------------客户端

​ 通过 thrift 生成的文件来通信传输

​ (1): 服务端代码:

from hello import HelloService
from hello.ttypes import *
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
 
 
class HelloServiceHandler:
    def say(self, msg):
        ret = "服务端接收到的信息为:" + msg
        print (ret)
        return len(msg)  # 返回int,与thrift文件中定义的返回i32数据类型一致
 
    def body(self, id, name, age):
    	return f'id是{id}, 姓名是{name}, 年龄是{age}'  # 返回string,与thrift文件中一致

handler = HelloServiceHandler()
processor = HelloService.Processor(handler)  # 定义一个TProcess处理类,创建TProcess对象
transport = TSocket.TServerSocket("localhost", 9090) # 设置网络读写
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
 
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
 
print("启动服务")
server.serve()

​ (2) 客户端来链接代码:

from hello import HelloService
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
 
while True:
	try:
		transport = TSocket.TSocket('localhost', 9090)  # 创建一个传输层对象(TTransport),设置调用的服务地址为本地,端口为 9090,TSocket传输方式
		transport = TTransport.TBufferedTransport(transport)
		protocol = TBinaryProtocol.TBinaryProtocol(transport) # 创建通信协议对象(TProtocol),设置传输协议为 TBinaryProtocol
		client = HelloService.Client(protocol)  # 创建一个Thrift客户端对象
		transport.open()
 
		send_msg = input("客户端发送信息:")
		rec_msg = client.say(send_msg)
		print("say方法返回的信息为:" , rec_msg)
		rec_msg = client.body(2, send_msg, 28)
		print('body方法返回的信息为:', rec_msg)
 
	except Thrift.TException as ex:
		print(ex.message)
	finally:
		transport.close()

二, 工作模式

thrift 5种server工作模式:

thrift server就是一个服务器,本质和其他服务器没有区别,每一种都都有对应的http服务器的实现,思想基本一致。
大致仍然可以分为两大类:基于bio和的基于nio的。
先看bio的。
1.TSimpleServer:
最简单的server,本质就是一个单线程的 socket的server。可以理解为一个while(true)循环。测试使用。

2.TThreadPoolServer:
典型的connection per thread模式。线程池支持。

下面是nio的。
3.TNonblockingServer:
单线程的nio server,事件注册在selector上。由于是单线程的,性能并没有多大提升。

4.THsHaServer:
基于nio,只不过最终请求的处理时在线程池中进行的,效率较高。

5.TThreadedSelectorServer:
基于nio的server,目前性能最高也最复杂。
进一步将各个过程分给不同的线程池处理,有accept线程池,io线程池和业务线程池。生产环境不知道用哪一个可以用这个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值