gRPC框架使用

gRPC使用protobuf格式数据传输;至于什么是protuf,怎样使用,参见:http://idoubi.cc/2017/12/02/protobuf%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B%E6%8C%87%E5%8D%97/

使用protobuf最好在goland上安装protobuf插件,便于检查protobuf的语法错误。


gRPC特点:

  • 基于HTTP/2 
    HTTP/2 提供了连接多路复用、双向流、服务器推送、请求优先级、首部压缩等机制。可以节省带宽、降低TCP链接次数、节省CPU,帮助移动设备延长电池寿命等。gRPC 的协议设计上使用了HTTP2 现有的语义,请求和响应的数据使用HTTP Body 发送,其他的控制信息则用Header 表示。
  • IDL使用ProtoBuf 
    gRPC使用ProtoBuf来定义服务,ProtoBuf是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian)。ProtoBuf能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。压缩和传输效率高,语法简单,表达力强。
  • 多语言支持(C, C++, Python, PHP, Nodejs, C#, Objective-C、Golang、Java) 
  • gRPC支持多种语言,并能够基于语言自动生成客户端和服务端功能库。目前已提供了C版本grpc、Java版本grpc-java 和 Go版本grpc-go,其它语言的版本正在积极开发中,其中,grpc支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等语言,grpc-java已经支持Android开发。

插播me:

工具VS框架:框架就是库,工具可以直接用,不在此基础上开发,框架就是二次开发的工具,哈哈

问:为什么我使用nginx-(nginx是c语言开发的)的时候,不需要学习c语言和使用c语言开发,而我使用grpc的时候,如果选定是用哪个语言的版本

答:nginx是一种工具,也可以说一个库,如果不在nginx上进行二次开发,就不需要使用c,只需要按照配置使用nginx即可。

而使用grpc,需要选好是go语言使用,还是c,那是因为要在grpc上进行开发,在这里grpc就是一个类库,调用需要使用语言去调用。

所有的语言,即所谓的开发语言,都是运行在os上,而os是对硬件及其使用方法的抽象,os提供了很多接口,也就是方法,这些方法可以操作计算机的硬件,我们利用各种语言开发程序,就是为了让计算机硬件给我们干活,开发出来的软件,本身是没有生命的,被编译器编译成二进制文件,在需要系统调用的地方做上标记,当运行的时候,系统调用的时候,就会陷入os内核调用,去调用os的接口。所谓的库-含框架,以及工具,都是我们可以拿来即可用的代码,使用库需要语言调用,使用工具一般只需要配置即可,或者按照工具的使用说明使用即可,如果不对工具进行二次开发,是不需要研究工具是用那种语言开发的。

20200425更新:我认为自己此前的认识不对,插播错误。nginx和grpc的根本区别是,nginx是配置好之后独立运行的进程,而grpc只是个插件,插件,是个工具,是我们在开发中节省开发量的一个东西,调用它的功能肯定要用计算机语言啊。包括protobuf也只是一个序列化工具,所以调用需要用语言。再说protobuf确实支持c,go等多种语言。


如何使用gRPC

1.安装好protobuf,客户端和服务端皆需要

2.安装好protobuf对go的支持包,客户端和服务端皆需要

3.安装gRPC,客户端和服务端皆需要

4.使用

4.1 server端

package main

import (
	"context"
	"fmt"
	pt "gRPC/client/pbclient"
	"google.golang.org/grpc"
	"net"
)

const(
	post = "127.0.0.1:18881"
)
//实现pb包内,的接口
type Server struct{}

func(this *Server)SayHello(ctx context.Context,in *pt.HelloRequest)(*pt.HelloResponse,error){
	return &pt.HelloResponse{Message:"hello"+in.Name},nil
}

func main(){
	ln,err := net.Listen("tcp",post)
	if err != nil{
		panic(err)
	}

	//1:创造一个rpc服务器
	srv := grpc.NewServer()
	//2:在rpc服务器上注册pb的数据-需要提前想好要提供的rpc调用的方法,写好.proto文件,把proto文件转化成pb.go文件,实现pb.go文件接口
	pt.RegisterHelloServerServer(srv,&Server{})
	//rpc服务器的载体-绑定一个连接
	err = srv.Serve(ln)
	if err != nil {
		fmt.Println(err)
	}
}

syntax = "proto3";
package my_grpc_proto;

service HelloServer{
    //rpc 代理的方法
    rpc SayHello(HelloRequest)returns(HelloResponse){}
}

message HelloRequest{
    string name = 1;
}
message HelloResponse{
    string message = 1;
}
===========client端也需要这个.proto文件,以及需要如下的运行方式=========
在.proto文件所在的目录下,执行以下代码
 protoc --go_out=plugins=grpc:./ *.proto 

4.2client端

package main

import (
	"fmt"
	pt "gRPC/client/pbclient"
	"golang.org/x/net/context"
	"google.golang.org/grpc"
)

const(
	post = "127.0.0.1:18881"
)
func main(){
	//1:发起rpc连接
	conn,err := grpc.Dial(post,grpc.WithInsecure())
	if err!=nil {
		panic(err)
	}
	defer conn.Close()
	//2:生成rpc 连接的客户端
	c := pt.NewHelloServerClient(conn)
	//3:调用pb.go的代理的方法
	resp,err := c.SayHello(context.Background(),&pt.HelloRequest{Name:"yz"})
	if err !=nil {
		fmt.Println(err)
	}

	fmt.Println(resp)
}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的gRPC框架可以用来构建高效的、可扩展的分布式系统。它是一个开源的、高性能的RPC(远程过程调用)框架,用于构建客户端和服务器之间的通信。在Python中使用gRPC框架,通常需要以下几个步骤: 1. 定义.proto文件:.proto文件是gRPC使用的接口定义语言,它描述了数据类型和服务接口的定义。 [1] 2. 使用grpc_tools工具将.proto文件编译成Python代码:可以使用grpc_tools工具包中的protoc命令来将.proto文件编译成相应的Python代码。 [2] 3. 实现gRPC服务:在服务器端实现gRPC服务,这包括实现.proto文件中定义的服务接口。 [3] 4. 实现gRPC客户端:在客户端调用gRPC服务,发送请求并接收响应。 [3] 总结来说,Python中的gRPC框架可以通过定义.proto文件,使用grpc_tools工具编译成Python代码,然后实现gRPC服务和客户端来进行分布式系统的通信。123 #### 引用[.reference_title] - *1* [gRPC 框架 简单使用(python版)](https://blog.csdn.net/Java_KW/article/details/124334604)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* *3* [python 3 使用 grpc](https://blog.csdn.net/zscccccc/article/details/131124128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值