grpc&rpc

简介: grpc&rpc

grpc介绍:

在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。  

安装与使用:

Releases · protocolbuffers/protobuf · GitHub下载适合你平台的预编译好的二进制文件(protoc-<version>-<platform>.zip),然后将压缩包内的 /bin/protoc 文件添加到环境变量即可

grpc使用

首先建一个 Go 的工程:

go mod init grpcDemo

然后导入 gRPC 包:

go get google.golang.org/grpc@latest

.......这里篇幅太长 小编就不写了 配置比较简单 大家自己配置就可以了

rpc概念:

RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有:

应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。 通信框架:MINA 和 Netty。 Facebook 的 Thrift、Twitter 的 Finagle 等。  

重点介绍三种:

  • Dubbo:国内最早开源的 RPC 框架,极为出名,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。协议和序列化框架都可以插拔是极其鲜明的特色。
  • gRPC:Google 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言。RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。
  • Thrift:最初是由 Facebook 的开源 RPC 框架,主要是一个跨语言的服务开发框架,2007 年贡献给了 Apache 基金,成为 Apache 开源项目之一,支持多种语言。用户只要在其之上进行二次开发就行,应用对于底层的 RPC 通讯等都是透明的。不过这个对于用户来说需要学习特定领域语言这个特性,还是有一定成本的。

2.1 Simple RPC

服务端:

package main
import (
  "context"
  "grpcDemo/pb"
  "log"
  "net"
  "google.golang.org/grpc"
)
type server struct {
    // 继承 protoc-gen-go-grpc 生成的服务端代码
  pb.UnimplementedGreeterServer
}
// SimplePRC 服务端代码
func (s *server) SimpleRPC(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
  log.Println("client call simpleRPC...")
  log.Println(in)
  return &pb.HelloResponse{Reply: "Hello " + in.Name}, nil
}
func main() {
    // 监听本地 5678 端口
  listen, err := net.Listen("tcp", ":5678")
  if err != nil {
    log.Fatal(err)
    return
  }
    // 创建 gRPC 服务器
    s := grpc.NewServer()
    // 将实现的接口注册进 gRPC 服务器
    pb.RegisterGreeterServer(s, &server{})
    log.Println("gRPC server starts running...")
    // 启动 gRPC 服务器
    err = s.Serve(listen)
    if err != nil {
      log.Fatal(err)
      return
    }
}

客户端:

package main
import (
  "context"
  "grpcDemo/pb"
  "io"
  "log"
  "google.golang.org/grpc"
  "google.golang.org/grpc/credentials/insecure"
)
func simpleRPC(c pb.GreeterClient) {
  ctx := context.Background()
    // 调用服务端 SimpleRPC 并获取响应
  reply, err := c.SimpleRPC(ctx, &pb.HelloRequest{Name: "simpleRPC"})
  if err != nil {
    log.Fatal(err)
  }
  log.Println(reply.GetReply())
}
func main() {
    // 连接服务端,因为我们没有SSL证书,因此这里需要禁用安全传输
  dial, err := grpc.Dial("127.0.0.1:5678", grpc.WithTransportCredentials(insecure.NewCredentials()))
  if err != nil {
    log.Fatal(err)
    return
  }
  defer dial.Close()
  
  conn := pb.NewGreeterClient(dial)
  simpleRPC(conn)
}

总结:本篇文章主要讲述了rpc和grpc的使用和概念 rpc和grpc都是网络高性能服务器的重要步骤 喜欢的朋友可以深入了解

好了 本篇文章就到这里了 大家再见

相关文章
|
8月前
|
缓存 网络协议 安全
计算机网络 TCP、RPC、GRPC、HTTP 对比
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 对比
|
2月前
|
自然语言处理 负载均衡 API
gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架
gRPC 是一种现代开源高性能远程过程调用(RPC)框架,支持多种编程语言,可在任何环境中运行。它通过高效的连接方式,支持负载平衡、跟踪、健康检查和身份验证,适用于微服务架构、移动设备和浏览器客户端连接后端服务等场景。gRPC 使用 Protocol Buffers 作为接口定义语言,支持四种服务方法:一元 RPC、服务器流式处理、客户端流式处理和双向流式处理。
|
5月前
|
前端开发 C# 开发者
WPF开发者必读:MVVM模式实战,轻松构建可维护的应用程序,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离关注点,提高了代码的可维护性和可扩展性。本文详细介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定与逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种模式,开发者可以更高效地构建桌面应用程序。希望本文能帮助你在WPF开发中更好地应用MVVM模式。
277 1
|
5月前
|
网络协议 编译器 Go
揭秘!TCP、RPC、gRPC、HTTP大PK,谁才是网络通信界的超级巨星?一篇文章带你秒懂!
【8月更文挑战第25天】本文以教程形式深入对比了TCP、RPC、gRPC与HTTP这四种关键通信协议,并通过Go语言中的示例代码展示了各自的实现方法。TCP作为一种可靠的传输层协议,确保了数据的完整性和顺序性;RPC与gRPC作为远程过程调用框架,特别适合于分布式系统的函数调用与数据交换,其中gRPC在性能和跨语言支持方面表现出色;HTTP则是广泛应用于Web浏览器与服务器通信的应用层协议。选择合适的协议需根据具体需求综合考量。
338 0
|
7月前
|
存储 C++
gRPC 四模式之 双向流RPC模式
gRPC 四模式之 双向流RPC模式
284 0
|
7月前
|
安全 C++
gRPC 四模式之 客户端流RPC模式
gRPC 四模式之 客户端流RPC模式
68 0
|
7月前
|
C++
gRPC 四模式之 服务器端流RPC模式
gRPC 四模式之 服务器端流RPC模式
143 0
|
7月前
|
JSON API 数据格式
gRPC 四模式之 一元RPC模式
gRPC 四模式之 一元RPC模式
75 0
|
8月前
|
网络协议 安全 API
计算机网络 TCP、RPC、GRPC、HTTP 总结
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 总结
|
5月前
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC