降低网络开销、提升通信性能:用 Protobuf 优化 WebSocket 数据传输
WebSocket通信如何优化流量?用 Protobuf + gzip 压缩消息体
从 WebSocket 到 gRPC:用 Protobuf 重构高性能通信架构
上一篇文章利用python简单做了grpc的测试,可实际在项目开发时,会发现后端会碰到瓶颈,python的处理速度与并发远没有go来的好,既然会碰到,那我们这篇直接用把后端替换为go来实现,这样也刚好验证其实grpc只要是相同的.proto文件,那跨语言之间也依然可以通信。
直接上官网上,下载Go
https://go.dev/dl/然后在控制台里执行如下命令go version,有输出版本号,就说明安装成功了了
Microsoft Windows [版本 10.0.19045.6466](c) Microsoft Corporation。保留所有权利。go versiongo version go1.24.4 windows/amd64上一篇我们在用python写grpc里,需要安装相对应的grpc模块,同样的go也需要安装相对应的执行,执行如下代码即可安装
go install google.golang.org/protobuf/cmd/protoc-gen-go@latestgo install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest在D盘下创建grpc_test文件夹, 打开控制台,输入以下命令,初始化模块
D:\>cd grcp_testD:\grcp_test>D:\grcp_test>go mod init grpc_testgo: creating new go.mod: module grpc_testgo: to add module requirements and sums: go mod tidyD:\grcp_test>这个安装在之前的系列文章里提到了,就不赘述了,借助它把我们创建好的chat.proto生成相对应的go语言的数据结构和对应的grpc服务代码
syntax = "proto3";// 这一行非常重要,指定了生成的 go 文件的包路径和包名option go_package = "./pb";message ChatMessage { string user = 1; string content = 2;}message ChatResponse { string user = 1; string content = 2;}service ChatService {rpc SendMessage (ChatMessage) returns (ChatResponse);}然后执行如下命令即可
protoc --go_out=. --go-grpc_out=. chat.proto可以看到当前目录下的pb里可以看到chat.pb.go和chat_grpc.pb.go两个文件,我们现在就可以利用这两个文件来写服务端逻辑了。

再添加一个服务端main.go主文件,内容如下
package mainimport ( "context" "log" "net" //必须和go.mod中的module名 + 生成代码所在的文件夹名一致 pb "grpc_test/pb" "google.golang.org/grpc")// 实现服务type server struct { pb.UnimplementedChatServiceServer}func (s *server) SendMessage(ctx context.Context, req *pb.ChatMessage) (*pb.ChatResponse, error) { log.Printf("[recv] %s: %s", req.User, req.Content) return &pb.ChatResponse{ User: "server", Content: "ok", }, nil}func main() { // 监听端口 lis, err := net.Listen("tcp", ":6666") if err != nil { log.Fatalf("failed to listen: %v", err) } // 创建 gRPC server grpcServer := grpc.NewServer() // 注册服务 pb.RegisterChatServiceServer(grpcServer, &server{}) log.Println("gRPC server running on :6666") // 启动服务 if err := grpcServer.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) }}在控制台里执行
D:\grcp_test>go run main.go2026/04/23 14:58:42 gRPC server running on :6666然后我们就用上篇文章python写好的客户端连上来,做个测试, 可以发现两者是可以做到相通的。

通过这个示例,可以看到,grpc的核心优化在于只要是统一的proto,那不管是用Python 还是Go 的切换,是可以实现直接通信的, 不同语言只要遵循同一套协议,那就可以无缝协作,非常方便。