当前位置: 首页 > news >正文

wordpress 站点错误东莞企业网络营销平台

wordpress 站点错误,东莞企业网络营销平台,wordpress文章缩略图,宜昌公司做网站gRPC 学习笔记 一、gRPC 基础知识 gRPC 是 Google 开源的高性能、通用的远程过程调用(RPC)框架,基于 HTTP/2 协议和 Protocol Buffers(protobuf)序列化协议。gRPC 支持多语言,适合微服务架构下的高效服务间…

gRPC 学习笔记

一、gRPC 基础知识

gRPC 是 Google 开源的高性能、通用的远程过程调用(RPC)框架,基于 HTTP/2 协议和 Protocol Buffers(protobuf)序列化协议。gRPC 支持多语言,适合微服务架构下的高效服务间通信。

1.1 gRPC 的核心概念

  • 服务定义:通过 .proto 文件(Protocol Buffers)定义服务接口和消息类型。
  • 自动代码生成:使用 protoc 工具和插件自动生成服务端和客户端代码。
  • 多语言支持:支持 Go、Java、C++、Python 等多种语言。
  • 高性能:基于 HTTP/2,支持多路复用、流控、头部压缩等特性。
  • 多种通信模式:支持简单 RPC、服务端流、客户端流、双向流。
  • 安全通信:支持 TLS 加密和多种认证机制。

1.2 gRPC 通信流程

  1. 定义服务接口:使用 proto 文件定义服务和消息类型。
  2. 生成代码:通过 protoc 工具生成对应语言的服务端和客户端代码。
  3. 实现服务端逻辑:服务端实现 proto 生成的接口,启动 gRPC 服务器。
  4. 实现客户端调用:客户端通过 proto 生成的代码发起 RPC 调用。
  5. 加密与认证:可选,配置 TLS/Token 等安全机制。

二、Demo 实现流程

2.1 目录结构

grpc_demo1/
├── client/           # 客户端代码
│   └── main.go
├── server/           # 服务端代码
│   └── main.go
├── proto/            # proto 文件及生成的 Go 代码
│   ├── hello.proto
│   ├── hello.pb.go
│   └── hello_grpc.pb.go
├── key/              # TLS 证书和私钥
│   ├── server.crt
│   └── server.key
├── openssl-san.cnf   # 生成 SAN 证书的 openssl 配置
├── go.mod
└── go.sum

2.2 proto 文件定义

proto/hello.proto

syntax = "proto3";
package hello;
option go_package = "grpc_demo1/proto;hello";service HelloService {rpc SayHello (HelloRequest) returns (HelloResponse);
}message HelloRequest {string name = 1;
}message HelloResponse {string message = 1;
}
  • service HelloService:定义了一个 gRPC 服务。
  • rpc SayHello:定义了一个简单的 RPC 方法。
  • HelloRequest/HelloResponse:请求和响应消息结构。

2.3 生成 Go 代码

在项目根目录下执行:

protoc --go_out=. --go-grpc_out=. proto/hello.proto

会在 proto 目录下生成 hello.pb.go 和 hello_grpc.pb.go。

2.4 服务端实现

server/main.go 主要流程:

  1. 加载 TLS 证书。
  2. 创建 gRPC 服务器并注册服务。
  3. 实现 SayHello 方法。
  4. 启动监听。

核心代码片段:

creds, err := credentials.NewServerTLSFromFile("key/server.crt", "key/server.key")
if err != nil {log.Fatalf("failed to load TLS keys: %v", err)
}
s := grpc.NewServer(grpc.Creds(creds))
hello.RegisterHelloServiceServer(s, &helloServer{})

2.5 客户端实现

client/main.go 主要流程:

  1. 加载服务端证书。
  2. 通过 TLS 连接 gRPC 服务端。
  3. 创建客户端实例并发起调用。

核心代码片段:

creds, err := credentials.NewClientTLSFromFile("key/server.crt", "")
conn, err := grpc.Dial("localhost:8088", grpc.WithTransportCredentials(creds))
client := hello.NewHelloServiceClient(conn)
resp, err := client.SayHello(ctx, &hello.HelloRequest{Name: "World"})

2.6 TLS 加密认证

  • 证书生成:
    • 使用 openssl 配置文件(openssl-san.cnf)生成带 SAN 的自签名证书,保证兼容 Go 1.15+ 的 TLS 校验。
  • 服务端和客户端均需加载证书,保证通信加密。

三、gRPC 加密与认证

3.1 TLS 加密认证

  • TLS(Transport Layer Security) 是 gRPC 推荐的加密通信方式,能保证数据在传输过程中的机密性和完整性。
  • 证书生成时需包含 SAN 字段,兼容 Go 1.15+。
  • 服务端通过 credentials.NewServerTLSFromFile 加载证书和私钥,客户端通过 credentials.NewClientTLSFromFile 加载服务端证书。
  • 证书校验机制保证了客户端只信任指定的服务端。
TLS 配置流程
  1. 生成带 SAN 的自签名证书和私钥(见 openssl-san.cnf)。
  2. 服务端启动时加载证书和私钥,配置 gRPC 服务器:
    creds, err := credentials.NewServerTLSFromFile("key/server.crt", "key/server.key")
    s := grpc.NewServer(grpc.Creds(creds))
    
  3. 客户端连接时加载服务端证书:
    creds, err := credentials.NewClientTLSFromFile("key/server.crt", "")
    conn, err := grpc.Dial("localhost:8088", grpc.WithTransportCredentials(creds))
    

3.2 Token 认证(基于元数据的认证)

  • gRPC 支持通过元数据(metadata)实现 Token 认证,常用于身份校验、接口鉴权等场景。
  • 客户端每次请求���在 context 中携带 token,服务端拦截器校验 token。
Token 认证实现流程
  1. 定义 Token 拦截器

    • 服务端实现一个 UnaryInterceptor,拦截所有请求,校验 token。
    • 客户端通过 metadata 发送 token。
  2. 服务端拦截器示例

    import ("google.golang.org/grpc""google.golang.org/grpc/metadata""context""errors"
    )func tokenAuthInterceptor(validToken string) grpc.UnaryServerInterceptor {return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {md, ok := metadata.FromIncomingContext(ctx)if !ok {return nil, errors.New("missing metadata")}tokens := md["authorization"]if len(tokens) == 0 || tokens[0] != validToken {return nil, errors.New("invalid token")}return handler(ctx, req)}
    }
    // 注册拦截器
    s := grpc.NewServer(grpc.UnaryInterceptor(tokenAuthInterceptor("your-secret-token")))
    
  3. 客户端发送 Token 示例

    import ("google.golang.org/grpc/metadata"
    )
    md := metadata.New(map[string]string{"authorization": "your-secret-token"})
    ctx := metadata.NewOutgoingContext(context.Background(), md)
    resp, err := client.SayHello(ctx, &hello.HelloRequest{Name: "World"})
    
Token 认证优缺点
  • 优点:实现简单,适合内部服务间鉴权。
  • 缺点:Token 固定,安全性有限,适合配合 TLS 使用。

四、gRPC 关键知识点总结

  • option go_package 必须为合法的 Go import 路径,建议与 go.mod module 保持一致。

  • 多 proto 文件建议分包管理,避免命名冲突。

  • 服务端需实现 proto 生成的接口,并注册到 gRPC 服务器。

  • 客户端通过 proto 生成的 NewXXXClient 创���实例,发起 RPC 调用。

  • 推荐使用 SAN 字段的证书,兼容新版本 Go。

  • 服务端用 credentials.NewServerTLSFromFile,客户端用 credentials.NewClientTLSFromFile。

  • 证书无 SAN 字段会导致 TLS 握手失败。

  • go_package 路径错误会导致 import 或生成代码异常。

  • proto 包名与 go_package 不一致时,import 时要用 go_package 的包名。

四、完整流程回顾

  1. 编写 proto 文件,定义服务和消息。
  2. 生成 Go 代码。
  3. 实现服务端逻辑,注册并启动 gRPC 服务器。
  4. 实现客户端逻辑,连接服务端并发起调用。
  5. 配置 TLS 证书,实现加密通信。
  6. 启动服务端和客户端,完成服务间安全通信。

本项目完整演示了 gRPC 的基础知识、服务间通信流程及 TLS 加密认证,适合微服务开发入门和进阶学习。

http://www.dtcms.com/a/420384.html

相关文章:

  • html做网站的毕业设计酒水包装设计公司
  • wordpress设置教程视频快速网站优化技巧
  • 大管家抖音短视频视频解析工具
  • 建网站买完域名后怎么做sem搜索
  • 数字经济时代医疗业务系统面临的挑战与应对策略研究报告
  • 潍坊网站建设top个人网站建设实训目的
  • 如何查询网站的注册信息小程序直播助手
  • 建立企业网站的技能用dw做网站的菜单栏
  • 宁夏石嘴山市城乡建设局提意见网站怎么网页下载jpg格式图片
  • 电动修眉刀MCU方案开发,基于国产单片机方案设计
  • 青岛做网站企业排名燕郊做网站公司
  • 购买qq空间访客的网站网络营销课程ppt
  • Coze源码分析-资源库-编辑插件-前端源码-核心组件
  • 校园网站平台建设标准化建设考评网站
  • DKD论文阅读
  • 如何用表格做网站wordpress 插件语言
  • 项目建设管理 公司 网站德城区建设局网站
  • AI 还原历史动漫视频:从文案到剪辑全流程拆解
  • 化妆品网站设计报告学网页设计先学什么
  • 网站代码怎么优化wordpress 打赏
  • 数据中心动环监控系统解决方案:构建 “全链路感知、零秒预警、智能联动” 的运维防护体系
  • 图片放大、缩小、恢复原比例、旋转vue
  • 最大的做网站公司win7配置不能运行wordpress
  • 网站开发H5微商商城官网
  • WPS文字如何合并多个文档:两种方法
  • 1、网关分类详解:从网络层到应用层的完整网关体系
  • 益阳市住房和城乡建设局网站手机seo百度点击软件
  • 【Linux基础知识系列:第一百四十一篇】使用curl进行API交互
  • 网站建设公司如何盈利苏州网站设计哪家公司好
  • 告别 “无效坚持”,拥抱 “复利成长” | 输出型爱好如何重塑习惯