python程序作为服务端,Go程序作为客户端,基于gPRC进行通信

客户端

定义proto文件:

syntax = "proto3";

option go_package = ".;transfer";

service Greeter {
rpc SendImage (ImageRequest) returns (ImageReply) {}
} message ImageRequest {
string name = 1;
bytes image = 2;
} message ImageReply {
string message = 1;
}

编译: protoc --go_out=. --go-grpc_out=. ./*.proto

调用:

package main

import (
"context"
"google.golang.org/grpc"
"io/ioutil"
"log"
"time"
"vtion/transfer"
) const (
address = "localhost:50051"
name = "test"
) func main() {
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err != nil {
log.Fatalf("connect error: %v", err.Error())
}
defer conn.Close()
client := transfer.NewGreeterClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
image, err := ioutil.ReadFile("./images/binary.jpg")
if err != nil {
log.Fatalf("read error: %v", err.Error())
}
res, err := client.SendImage(ctx, &transfer.ImageRequest{Name: name, Image: image})
if err != nil {
log.Fatalf("send error: %v", err.Error())
}
log.Println(res.Message)
}

服务端

proto文件:

syntax = "proto3";

service Greeter {
rpc SendImage (ImageRequest) returns (ImageReply) {}
} message ImageRequest {
string name = 1;
bytes image = 2;
} message ImageReply {
string message = 1;
}

编译: python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. transfer.proto

调用:

from concurrent import futures
from PIL import Image
import time, logging, grpc, io
import transfer_pb2
import transfer_pb2_grpc class Greeter(transfer_pb2_grpc.GreeterServicer):
def SendImage(self, request, context):
stream = request.image
data = io.BytesIO(stream)
image = Image.open(data)
image.save("test.png")
return transfer_pb2.ImageReply(message=f"success {request.name}") def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
transfer_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port("[::]:50051")
server.start()
server.wait_for_termination() if __name__ == "__main__":
serve()

Go/Python 基于gRPC传输图片的更多相关文章

  1. 技术实践:教你用Python搭建gRPC服务

    摘要:gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf序列化协议开发,且支持众多开发语言. 本文分享自华为云社区& ...

  2. python基于LeanCloud的短信验证

    python基于LeanCloud的短信验证 1. 获取LeanCloud的Id.Key 2. 安装Flask框架和Requests库 pip install flask pip install re ...

  3. Python基于共现提取《釜山行》人物关系

    Python基于共现提取<釜山行>人物关系 一.课程介绍 1. 内容简介 <釜山行>是一部丧尸灾难片,其人物少.关系简单,非常适合我们学习文本处理.这个项目将介绍共现在关系中的 ...

  4. Python 基于Python实现的ssh兼sftp客户端(上)

    基于Python实现的ssh兼sftp客户端   by:授客 QQ:1033553122 实现功能 实现ssh客户端兼ftp客户端:实现远程连接,执行linux命令,上传下载文件 测试环境 Win7 ...

  5. Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端     import ...

  6. Python基于正则表达式实现文件内容替换的方法

    Python基于正则表达式实现文件内容替换的方法 本文实例讲述了Python基于正则表达式实现文件内容替换的方法.分享给大家供大家参考,具体如下: 最近因为有一个项目需要从普通的服务器移植到SAE,而 ...

  7. Python基于回溯法解决01背包问题实例

    Python基于回溯法解决01背包问题实例 这篇文章主要介绍了Python基于回溯法解决01背包问题,结合实例形式分析了Python回溯法采用深度优先策略搜索解决01背包问题的相关操作技巧,需要的朋友 ...

  8. 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!

    摘要:在当今信息化时代,大多数企业都需要网络支撑企业的ICT运行,提升企业运行效率,针对企业网络中的网元设备(包括交换机,路由器,防火墙等),很多企业希望根据自身的业务特点定制网络管理,比如可以实现网 ...

  9. python中grpc配置asyncio使用

    python中grpc配置asyncio使用 安装grpclib pip3 install grpclib protoc编译.proto文件,生成源码文件 python -m grpc_tools.p ...

  10. Python基于周立功ZCANPRO开发刷写脚本

    一.概述 1.背景 本文章主要是记录用Python基于周立功ZCANPRO开发VIN和SN码刷写工具. 2.环境搭建 Python3.8.10 32位(必须) 周立功上位机:ZCANPRO 周立功CA ...

随机推荐

  1. ubuntu14搭建内网gitlab服务器

    平台 宿主机系统版本:Ubuntu 14.04.5 LTS gitlab软件版本:11.10.8-ee 验证web浏览器版本:Mozilla Firefox 68.3.0esr 安装firefox浏览 ...

  2. houdini python 配置 vscode 环境

    一.在我的文档python文件夹中找到houdini.env文件,打开,加入语句 EDITOR = vscode路径 例如:EDITOR = D:\vscode\Microsoft VS Code\C ...

  3. php 后台注册环信用户

    <?php //Easemob.php <?php /** -------------------------------------------------- 环信PHP REST示例代 ...

  4. vmware网络故障处理

    1.基本情况,更新vmware后发现联不上ssh了.查看物理机和虚拟机的ip,使用ping命令发现 虚拟机可以ping物理机且有网络 但是物理机是无法ping虚拟机的 2.网络的教程整理了,各有问题, ...

  5. django orm的增删改查 以及django1.x和2.x的区别

    ORM对字段的增删改查 # 建一个作者表 class Author(models.Model): ''' 如果你以后在创建表的时候,主键就叫id名,那么可以省略不写,orm会自动帮你创建出主键名称为i ...

  6. 深入理解css 笔记(8)

      接下来我们讲下响应式设计,最初开发人员通过创建两个网站来解决这个问题.桌面版和移动版,只是假如要兼容越来越多的设备,比如大屏的平板手机,ipad mini.这时候,强制分开的方案带来就比较多的麻烦 ...

  7. 在Vue的mixins(混入)里面调用Vuex(@/store/index.js)的函数

    第一步:在mixin.js里面引入 mapMutations 第二步:跟组件内调用一样,在methods里面写 "...mapMutations(['xxx'])",   然后LZ ...

  8. 使用ELRepo升级CentOS内核

    在腾讯云中部署了一些服务器,操作系统使用的是CentOS 7.6,但是其默认内核版本较低,现使用ELRepo对CentOS的内核进行升级. 操作环境 服务器:腾讯云轻量应用服务器 操作系统:CentO ...

  9. 文件的上传&预览&下载学习(一)

    注:主要是说明后端逻辑和数据库表设计 1.当前主流的几种文件上传&预览&下载方式 把文件直接存储在服务器 分布式存储OSS,比如阿里OSS.Minio 2.数据库表设计 由于文件都是跟 ...

  10. Linux & 标准C语言学习 <DAY1>

    Linux系统简单介绍:     BCPL->New B->C->UNIX->Minix->Linux->gcc     美国贝尔实验室 1968     Linu ...