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都是网络高性能服务器的重要步骤 喜欢的朋友可以深入了解

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

相关文章
|
3月前
|
缓存 网络协议 安全
计算机网络 TCP、RPC、GRPC、HTTP 对比
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 对比
|
6月前
|
编解码 中间件 Go
Go语言学习 - RPC篇:gRPC拦截器剖析
我们在前几讲提到过,优秀的RPC框架都提供了`middleware`的能力,可以减少很多重复代码的编写。在gRPC-Gateway的方案里,包括了两块中间件的能力: 1. gRPC中的`ServerOption`,是所有gRPC+HTTP都会被处理 2. gRPC-Gateway中的`ServeMuxOption`,只有HTTP协议会被处理 今天,我们先关注共同部分的`ServerOption`,它提供的能力最为全面,让我们一起了解下。
45 0
|
3月前
|
网络协议 安全 API
计算机网络 TCP、RPC、GRPC、HTTP 总结
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 总结
|
4月前
|
缓存 网络协议 安全
tcp、http、rpc和grpc得一些个人总结
tcp、http、rpc和grpc得一些个人总结
78 0
|
4月前
|
XML Go 开发工具
RPC简介和grpc的使用
RPC简介和grpc的使用
56 0
|
6月前
|
JSON Cloud Native 网络协议
gRPC简介: Google的高性能RPC框架
gRPC简介: Google的高性能RPC框架
76 0
|
Go 流计算
gRPC阅读日记(七)客户端的RPC构建2
gRPC阅读日记(七)客户端的RPC构建2
|
Go 流计算
gRPC阅读日记(六)来看看客户端的rpc请求如何实现
gRPC阅读日记(六)来看看客户端的rpc请求如何实现
|
测试技术 流计算
gRPC阅读日记(四)Client-side streaming RPC and Bidirectional streaming RPC
gRPC阅读日记(四)Client-side streaming RPC and Bidirectional streaming RPC
|
2月前
|
负载均衡 Dubbo Java
Dubbo 3.x:探索阿里巴巴的开源RPC框架新技术
随着微服务架构的兴起,远程过程调用(RPC)框架成为了关键组件。Dubbo,作为阿里巴巴的开源RPC框架,已经演进到了3.x版本,带来了许多新特性和技术改进。本文将探讨Dubbo 3.x中的一些最新技术,包括服务注册与发现、负载均衡、服务治理等,并通过代码示例展示其使用方式。
80 9