中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中thrift如何實現單端口多服務

發布時間:2020-07-17 16:33:18 來源:億速云 閱讀:173 作者:小豬 欄目:開發技術

這篇文章主要為大家展示了python中thrift如何實現單端口多服務,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

Thrift 是一種接口描述語言和二進制通信協議。以前也沒接觸過,最近有個項目需要建立自動化測試,這個項目之間的微服務都是通過 Thrift 進行通信的,然后寫自動化腳本之前研究了一下。

  需要定義一個xxx.thrift的文件, 來生成各種語言的代碼,生成之后我們的服務提供者和消費者,都需要把代碼引入,服務端把代碼實現,消費者直接使用API的存根,直接調用。

  和 http 相比,同屬于應用層,走 tcp 協議。Thrift 優勢在于發送同樣的數據,request包 和 response包 要比 http 小很多,在整體性能上要優于 http 。

前言

學習了兩天thrift 一直想實現單端口多服務 但是苦于網上的 thrift 實在太少 而且大部分都是java實現的 最后 改了一個java的 實現了 單端口多服務

實現過程

1 創建 thrift 文件 添加兩個服務 Transmit Hello_test

service Transmit {
string invoke(1:i32 cmd 2:string token 3:string data)
}

service Hello_test {
string hello(1: string name)
}

2 運行 thrift.exe -out gen-py --gen py test.thrift

生成對應接口 因為我的 服務端和 用戶端 都是用 python寫的 所以 只需要 生成python 接口即可

3 編寫 server.py

# 服務類1 TransmitHandler
class TransmitHandler:
 def __init__(self):
  self.log = {}

 def invoke(self, cmd, token, data):
  cmd = cmd
  token = token
  data = data
  if cmd == 1:
	  return data + 'and' + token
  else:
   return 'cmd不匹配'
# 服務類2 HelloHandler
class HelloHandler:
	def hello(self, name):
		return 'hello'+name

4 編寫服務端運行代碼 開啟服務端

from test import Transmit
from test import Hello_test

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
# 導入
from thrift.TMultiplexedProcessor import TMultiplexedProcessor
from TransmitHandler_server import TransmitHandler
from Hello_server import HelloHandler


# open server
if __name__ == "__main__":
 # 實現 單端口 多服務 的方法

 transmit_handler = TransmitHandler()
 transmit_processor = Transmit.Processor(transmit_handler)

 hello_handler = HelloHandler()
 hello_processor = Hello_test.Processor(hello_handler)

 transport = TSocket.TServerSocket('127.0.0.1', 8000)
 tfactory = TTransport.TBufferedTransportFactory()
 pfactory = TBinaryProtocol.TBinaryProtocolFactory()
 # 多 processor
 processor = TMultiplexedProcessor()
 processor.registerProcessor('transmit', transmit_processor)
 processor.registerProcessor('hello', hello_processor)

 server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
 print("Starting python server...")
 server.serve()

值得注意的是 要想實現單端口 多服務 就必須得
引入processor = TMultiplexedProcessor()
用來注冊兩個服務類
processor.registerProcessor(‘name', procress對象)
name 屬性將會在client 時用到

5運行 runserver.py

如果出現Starting python server… 則運行成功

6 編寫client.py

from test import Transmit
from test import Hello_test
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.protocol.TMultiplexedProtocol import TMultiplexedProtocol


if __name__ == '__main__':
	# 啟動 服務
	transport = TSocket.TSocket('127.0.0.1', 8000)
	transport = TTransport.TBufferedTransport(transport)
	protocol = TBinaryProtocol.TBinaryProtocol(transport)

	# 注冊兩個protocol 如果想要實現單端口 多服務 就必須使用 TMultiplexedProtocol
	transmit_protocol = TMultiplexedProtocol(protocol, 'transmit')
	hello_protocol = TMultiplexedProtocol(protocol, 'hello')

	# 注冊兩個客戶端
	transmit_client = Transmit.Client(transmit_protocol)
	hello_client = Hello_test.Client(hello_protocol)

	transport.open() # 打開鏈接
	
	# 測試服務1
	cmd = 1
	token = '1111-2222-3333-4444'
	data = "kong_ge"
	msg = transmit_client.invoke(cmd, token, data)
	print(msg)
	
	# 測試服務2
	name = '孔格'
	msg2 = hello_client.hello(name)
	print(msg2)
	
	# 關閉
	transport.close()

7運行client

觀察結果 實現單端口多服務

以上就是關于python中thrift如何實現單端口多服務的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西吉县| 贵德县| 怀柔区| 余干县| 临夏市| 乐陵市| 蒙阴县| 淅川县| 遂平县| 神池县| 新和县| 安仁县| 含山县| 太保市| 巫山县| 海伦市| 香格里拉县| 彭阳县| 鹿邑县| 芜湖市| 徐水县| 乌鲁木齐市| 弋阳县| 仁寿县| 德钦县| 衡水市| 湖州市| 泰和县| 江门市| 临澧县| 周宁县| 象山县| 磐石市| 五原县| 贵德县| 红河县| 津市市| 彰武县| 玛多县| 博兴县| 根河市|