久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

RPC 框架 應(yīng)用

 candidacy 2019-11-26

 

RPC

RPC(Remote Procedure Call)服務(wù),也即遠程過程調(diào)用,,在互聯(lián)網(wǎng)企業(yè)技術(shù)架構(gòu)中占據(jù)了舉足輕重的地位,,尤其在當(dāng)下微服務(wù)化逐步成為大中型分布式系統(tǒng)架構(gòu)的主流背景下,RPC 更扮演了重要角色,。

 

Google 開源了 gRPC,F(xiàn)acebook 開源了 Thrift,,Twitter 開源了 Finagle,,百度開源了 bRPC,,騰訊開源了 Tars,阿里開源了 Dubbo 和 HSF,,新浪開源了 Motan 等,,一線互聯(lián)網(wǎng)大廠們紛紛亮出自己研制的 RPC 框架武器,在解決分布式高并發(fā)業(yè)務(wù)問題的同時,,也向外界展示自己的技術(shù)實力,。

互聯(lián)網(wǎng)公司百花齊放,貌似高深復(fù)雜的 RPC 框架解決了哪些業(yè)務(wù)難題,?

gRPC 簡介:

gRPC 是一款高性能,、開源的 RPC 框架,產(chǎn)自 Google,,基于 ProtoBuf 序列化協(xié)議進行開發(fā),,支持多種語言(Golang、Python,、Java等),,本篇只介紹 Python 的 gRPC 使用。因為 gRPC 對 HTTP/2 協(xié)議的支持使其在 Android,、IOS 等客戶端后端服務(wù)的開發(fā)領(lǐng)域具有良好的前景,。gRPC 提供了一種簡單的方法來定義服務(wù),同時客戶端可以充分利用 HTTP/2 stream 的特性,,從而有助于節(jié)省帶寬,、降低 TCP 的連接次數(shù)、節(jié)省CPU的使用等,。

安裝:

gRPC 的安裝:

$ pip install grpcio

安裝 ProtoBuf 相關(guān)的 python 依賴庫

$ pip install protobuf

安裝 python grpc 的 protobuf 編譯工具:

pip install grpcio-tools

實踐:

下面我們使用 gRPC 定義一個接口,,該接口實現(xiàn)對傳入的數(shù)據(jù)進行大寫的格式化處理

創(chuàng)建項目 python demo 工程

client目錄下的 main.py 實現(xiàn)了客戶端用于發(fā)送數(shù)據(jù)并打印接收到 server 端處理后的數(shù)據(jù)
  1. server 目錄下的 main.py 實現(xiàn)了 server 端用于接收客戶端發(fā)送的數(shù)據(jù),并對數(shù)據(jù)進行大寫處理后返回給客戶端
  2. example 包用于編寫 proto 文件并生成 data 接口

定義 gRPC 接口:

 

復(fù)制代碼
syntax = "proto3";
package example;
service FormatData {
  rpc DoFormat(Data) returns (Data){}
}
message Data {
  string text = 1;
}
復(fù)制代碼

編譯 protobuf

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./data.proto 

#在 example 目錄中執(zhí)行編譯,,會生成:data_pb2.py 與 data_pb2_grpc.py

實現(xiàn) server 端:

復(fù)制代碼
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import grpc
import time
from concurrent import futures
from example import data_pb2, data_pb2_grpc

_ONE_DAY_IN_SECONDS = 60 * 60 * 24
_HOST = 'localhost'
_PORT = '8080'

class FormatData(data_pb2_grpc.FormatDataServicer):
    def DoFormat(self, request, context):
        str = request.text
        return data_pb2.Data(text=str.upper())

def serve():
    grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))
    data_pb2_grpc.add_FormatDataServicer_to_server(FormatData(), grpcServer)
    grpcServer.add_insecure_port(_HOST + ':' + _PORT)
    grpcServer.start()
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        grpcServer.stop(0)

if __name__ == '__main__':
    serve()
復(fù)制代碼

實現(xiàn) client 端:

復(fù)制代碼
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import grpc
from example import data_pb2, data_pb2_grpc

_HOST = 'localhost'
_PORT = '8080'

def run():
    conn = grpc.insecure_channel(_HOST + ':' + _PORT)
    client = data_pb2_grpc.FormatDataStub(channel=conn)
    response = client.DoFormat(data_pb2.Data(text='hello,world!'))
    print("received: " + response.text)

if __name__ == '__main__':
    run()
復(fù)制代碼

執(zhí)行驗證結(jié)果:

先啟動 server,,之后再執(zhí)行 client

client 側(cè)控制臺如果打印的結(jié)果為:“received: HELLO,WORLD!” ,證明 gRPC 接口定義成功

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多