在GoLang中使用gRPC和ProtoBuf教程

111 阅读2分钟

本文是GoLang系列的一部分:建立一个Web服务器

欢迎回到构建网络服务器系列。在上一篇文章中,我们学习了如何使用GoLang提供的本地包在Go中编写一个基本的RPC服务器。到目前为止,我们一直使用普通英语来接收请求并从我们的服务器发送响应。在这篇文章中,我们将摆脱这种方式,寻找更多的最佳方式来传输数据。

如果我们不需要直接理解服务的内容,为什么要用XML、JSON或其他人类可读的格式发送数据呢?只要我们还能在明确需要时将其翻译成人类可读的格式,我们就应该很好。一个这样的机制就是Protobuf

什么是Protobuf?

协议缓冲区是一种数据格式,就像JSON和XML一样,它存储了可以被序列化和反序列化的结构化数据。它将数据抽象为一种语言和平台中立的格式。Protobuf的主要优点是它比其他格式小得多,因此使用它发送数据时可以提高速度。

Protobuf比XML小3到10倍,快20到100倍。

Protobuf是由谷歌开发的。

Protobuf与语言无关,它被广泛用作RPC服务器的接口定义语言(IDL),与所选择的语言一起使用。一个这样的应用可以在 gRPC框架 它默认使用协议缓冲区。

带有GoLang的Protobuf

在同一代码基础上扩展,我们将把服务器修改为gRPC和Protobuf的RPC通信。在下面的例子中,我将为演示用户服务编写一个GetUsers方法。

步骤1: 使用protoc编译器和grpc插件编写proto定义并生成go代码

syntax = "proto3";

如何安装protoc编译器? -在这里找到

protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative proto/user.proto

第2步: 实现proto RPC服务器

package rpc

3步: 更新启动服务器的钩子

func registerHooks(

我们使用gRPC和Protobuf的RPC服务器已经准备好接收请求了。只需使用go run main.go启动服务器即可。

请在GitHub上找到上面写的代码。

通过这篇文章,我们把构建Web服务器系列带回家。希望这篇文章能帮助你开始使用GoLang/网络服务器。

编码趣事:电脑游戏如此受欢迎,以至于游戏产业现在比电影产业的价值还要高!你知道吗?

要求: 请在评论中加入你的宝贵意见,这将真正帮助我提高内容的质量,使其符合你的期望。