首页 > 编程语言 >Go/Python 基于gRPC传输图片

Go/Python 基于gRPC传输图片

时间:2022-12-21 13:46:35浏览次数:35  
标签:err Python transfer image server gRPC Go message grpc

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()

标签:err,Python,transfer,image,server,gRPC,Go,message,grpc
From: https://www.cnblogs.com/N3ptune/p/16996047.html

相关文章

  • 链路追踪-Google-Dapper论文翻译总结
    ​一、两个基本需求无处不在的部署:无处不在很重要,如果系统的一小部分没有被监视,就会受到影响连续监测:因为通常情况下,不寻常或其他值得注意的系统行为很难或不可能重现最......
  • web自动化selenium+python
      对于每一条selenium脚本,一个http请求会被创建并且发送给浏览器的驱动,浏览器驱动中包含了一个httpserver。用来接收这些请求,httpserver接收到请求后根据请求来具体......
  • Python中利用exec批量生成变量
    转载自:https://blog.csdn.net/qq_41710383/article/details/115758160exec和eval的区别函数概括eval():函数用来执行一个字符串表达式,并返回表达式的值。注意:计算指......
  • 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-JWT和中间件(Middlewar
    前文再续,上一回我们完成了用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。本回......
  • Python-实现斐波那契数列
    代码实现如下:#-*-coding:utf-8-*-#定义函数deffab(n):#判断n的有效性ifn<=0:return'传递的参数必须是大于0的正整数!'#当n为1时......
  • python编程实战案例--turtle图案绘制
    1.turtle库基本介绍(1)turtle(海龟库):是python的标准库之一,是python绘图体系的实现具体实现:海龟(画笔)处于画面正中央,当海龟落下,行走的所形成的的轨迹,就是我们所绘制的图案2.turt......
  • NoSQL 数据库案例实战 --MongoDB 数据库 用户管理
    MongoDB数据库用户管理​​前言​​​​一、创建用户​​​​二、登录数据库​​前言本环境是基于Centos7.8系统构建mongodb-enterprise-4.2.8学习环境具体构建,请参考......
  • Python中的sorted()函数
    sorted()函数的主要用法>>>list=[1,3,2,4]#输入>>>sorted(list)#输入[1,2,3,4]#输出默认升序排列>>>sorted(list,reverse=True)#输入#降序排列[4,3,2,1......
  • python+excel=openpyxl(二)
     创建一个workbook>>>fromopenpyxlimportWorkbook>>>fromopenpyxl.utilsimportget_column_letter>>>>>>wb=Workbook()>>>>>>dest_filename='empty_book.xl......
  • django8
    Q查询进阶操作fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector='or'#默认多个条件的连接是and可以修改为orq_obj.children.append(('......