当前位置:首页>python>从 Python 到 Go:用 gRPC 实现跨语言高性能通信

从 Python 到 Go:用 gRPC 实现跨语言高性能通信

  • 2026-10-11 08:39:48
从 Python 到 Go:用 gRPC 实现跨语言高性能通信

降低网络开销、提升通信性能:用 Protobuf 优化 WebSocket 数据传输

WebSocket通信如何优化流量?用 Protobuf + gzip 压缩消息体

从 WebSocket 到 gRPC:用 Protobuf 重构高性能通信架构

上一篇文章利用python简单做了grpc的测试,可实际在项目开发时,会发现后端会碰到瓶颈,python的处理速度与并发远没有go来的好,既然会碰到,那我们这篇直接用把后端替换为go来实现,这样也刚好验证其实grpc只要是相同的.proto文件,那跨语言之间也依然可以通信。

安装Go

直接上官网上,下载Go

https://go.dev/dl/

然后在控制台里执行如下命令go version,有输出版本号,就说明安装成功了了

Microsoft Windows [版本 10.0.19045.6466](c) Microsoft Corporation。保留所有权利。go versiongo version go1.24.4 windows/amd64

安装Go的gRPC 插件

上一篇我们在用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>

安装protoc

这个安装在之前的系列文章里提到了,就不赘述了,借助它把我们创建好的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 的切换,是可以实现直接通信的, 不同语言只要遵循同一套协议,那就可以无缝协作,非常方便。

最新文章

随机文章