grpc python實(shí)例demo

最近換了新的項(xiàng)目,接觸到了新的技術(shù)grpc蔫巩,本著熱愛&不學(xué)習(xí)就會(huì)落后的精神谆棱,自己閑來(lái)也照葫蘆畫瓢了搞個(gè)demo。

一批幌、grpc概念

先看看官方的文檔:
gRPC 一開始由 google 開發(fā)础锐,是一款語(yǔ)言中立、平臺(tái)中立荧缘、開源的遠(yuǎn)程過(guò)程調(diào)用(RPC)系統(tǒng)皆警。gRPC 是一個(gè)高性能、開源和通用的 RPC 框架截粗,面向移動(dòng)和 HTTP/2 設(shè)計(jì)信姓。目前提供 C、Java 和 Go 語(yǔ)言版本绸罗,分別是:grpc, grpc-java意推,grpc-go. 其中 C 版本支持 C, C++, Node.js,Python珊蟀, Ruby, Objective-C, PHP和 C# 支持.

gRPC 基于 HTTP/2 標(biāo)準(zhǔn)設(shè)計(jì)菊值,帶來(lái)諸如雙向流、流控育灸、頭部壓縮腻窒、單 TCP 連接上的多復(fù)用請(qǐng)求等特。這些特性使得其在移動(dòng)設(shè)備上表現(xiàn)更好磅崭,更省電和節(jié)省空間占用儿子。

二、grpc環(huán)境準(zhǔn)備

1砸喻、本次demo使用python版本柔逼,首先需要準(zhǔn)備python3環(huán)境:

Python 3.5或更高版本

pip 版本9.0.1或更高

2、安裝grpc

pip install grpcio

3割岛、安裝 ProtoBuf 相關(guān)的 python 依賴庫(kù)

pip install protobuf

4愉适、安裝 python grpc 的 protobuf 編譯工具:

pip install grpcio-tools

三、開始demo項(xiàng)目

1癣漆、創(chuàng)建一個(gè)空的項(xiàng)目

2儡毕、項(xiàng)目下新建一個(gè)proto文件夾

3、新建helloworld.proto文件,內(nèi)容如下:

// Copyright 2015 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";

package helloworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

4腰湾、執(zhí)行命令
切換到上一步的目錄雷恃,執(zhí)行
python -m grpc_tools.protoc -I./ --python_out=. --grpc_python_out=. helloworld.proto
5、創(chuàng)建服務(wù)端和客戶端代碼

#coding=utf-8
from concurrent import futures
import time
import grpc
from proto import helloworld_pb2
from proto import helloworld_pb2_grpc

_ONE_DAY_IN_SECONDS = 60 * 60 * 24


class Greeter(helloworld_pb2_grpc.GreeterServicer):
    # 工作函數(shù)
    def SayHello(self, request, context):
        print(request.name)
        message = "This message is from Server.And what i want to say is hello \" " + request.name + " \"";
        return helloworld_pb2.HelloReply(message = message)


def serve():
    # gRPC 服務(wù)器
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    print("sever is opening ,waiting for message...")
    server.start()  # start() 不會(huì)阻塞费坊,如果運(yùn)行時(shí)你的代碼沒(méi)有其它的事情可做倒槐,你可能需要循環(huán)等待。
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        server.stop(0)

if __name__ == '__main__':
    serve()
#coding=utf-8
from __future__ import print_function

import grpc

from proto import helloworld_pb2
from proto import helloworld_pb2_grpc


def run():
    channel = grpc.insecure_channel('localhost:50051')
    stub = helloworld_pb2_grpc.GreeterStub(channel)
    response = stub.SayHello(helloworld_pb2.HelloRequest(name='Hello World附井! This is message from client!'))
    print("Greeter client received: " + response.message)


if __name__ == '__main__':
    run()

6讨越、運(yùn)行起來(lái)測(cè)試


image.png

成功了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末永毅,一起剝皮案震驚了整個(gè)濱河市把跨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沼死,老刑警劉巖着逐,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異意蛀,居然都是意外死亡耸别,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門县钥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)秀姐,“玉大人,你說(shuō)我怎么就攤上這事若贮∈∮校” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵谴麦,是天一觀的道長(zhǎng)蠢沿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)细移,這世上最難降的妖魔是什么搏予? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任熊锭,我火速辦了婚禮弧轧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碗殷。我一直安慰自己精绎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布锌妻。 她就那樣靜靜地躺著代乃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搁吓,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天原茅,我揣著相機(jī)與錄音,去河邊找鬼堕仔。 笑死擂橘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摩骨。 我是一名探鬼主播通贞,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼恼五!你這毒婦竟也來(lái)了昌罩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤灾馒,失蹤者是張志新(化名)和其女友劉穎茎用,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體你虹,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绘搞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了傅物。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夯辖。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖董饰,靈堂內(nèi)的尸體忽然破棺而出蒿褂,到底是詐尸還是另有隱情,我是刑警寧澤卒暂,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布啄栓,位于F島的核電站,受9級(jí)特大地震影響也祠,放射性物質(zhì)發(fā)生泄漏昙楚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一诈嘿、第九天 我趴在偏房一處隱蔽的房頂上張望堪旧。 院中可真熱鬧,春花似錦奖亚、人聲如沸淳梦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)爆袍。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陨囊,已是汗流浹背弦疮。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜘醋,地道東北人挂捅。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像堂湖,于是被迫代替她去往敵國(guó)和親闲先。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • gRPC 是一個(gè)高性能无蜂、通用的開源RPC框架伺糠,基于HTTP/2協(xié)議標(biāo)準(zhǔn)和Protobuf序列化協(xié)議開發(fā),支持眾多的...
    小波同學(xué)閱讀 19,468評(píng)論 6 19
  • C++ 開源庫(kù)列表https://en.cppreference.com/w/cpp/links/libs[htt...
    老陜西閱讀 2,068評(píng)論 0 0
  • gRPC的官方Demo 按照APK 方式隨意 目錄:examples/android/helloworld ./g...
    簡(jiǎn)簡(jiǎn)單單敲代碼閱讀 4,116評(píng)論 0 2
  • 久違的晴天斥季,家長(zhǎng)會(huì)训桶。 家長(zhǎng)大會(huì)開好到教室時(shí),離放學(xué)已經(jīng)沒(méi)多少時(shí)間了酣倾。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)舵揭。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,512評(píng)論 16 22
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友躁锡。感恩相遇午绳!感恩不離不棄。 中午開了第一次的黨會(huì)映之,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,556評(píng)論 0 11