本教程将指导您从零开始搭建一个完整的 gRPC 通信系统,使用 TypeScript 作为客户端,Go 作为服务端。
目录
环境准备
必需软件
在开始之前,请确保已安装以下软件:
1. Node.js 和 npm
如未安装,请访问 Node.js 官网 下载安装。
2. Go
如未安装,请访问 Go 官网 下载安装。
3. Protocol Buffers 编译器 (protoc)
macOS 安装:
Ubuntu/Debian 安装:
Windows 安装: 从 GitHub Releases 下载并配置环境变量。
4. Go 的 protoc 插件
5. TypeScript 的 grpc-tools
验证安装
运行以下命令验证所有工具已正确安装:
项目结构
我们将创建以下目录结构:
步骤一:创建 Proto 文件
1. 创建项目根目录
2. 创建 proto 目录和文件
创建文件 proto/demo.proto:
步骤二:搭建 Go 服务端
1. 创建 Go 服务端目录
2. 初始化 Go 模块
3. 安装依赖
4. 生成 Go 代码
执行后会在当前目录生成 proto/ 文件夹,包含:
demo.pb.godemo_grpc.pb.go
5. 创建服务端主程序
创建文件 go-server/main.go:
6. 整理依赖
7. 测试运行服务端
如果看到以下输出,说明服务端启动成功:
保持服务端运行,打开新的终端窗口继续下一步。
步骤三:搭建 TypeScript 客户端
1. 创建 TypeScript 客户端目录
在新的终端窗口中:
2. 初始化 npm 项目
3. 创建 package.json
编辑 package.json 文件,替换为以下内容:
4. 安装依赖
5. 创建 TypeScript 配置
创建文件 tsconfig.json:
6. 生成 TypeScript 代码
执行后会在 generated/ 目录生成四个文件:
demo_pb.jsdemo_pb.d.tsdemo_grpc_pb.jsdemo_grpc_pb.d.ts
7. 创建客户端源代码目录
8. 创建客户端主程序
创建文件 src/client.ts:
9. 创建测试程序
创建文件 src/test.ts:
10. 编译 TypeScript 代码
编译成功后会在 dist/ 目录生成 JavaScript 文件。
步骤四:运行测试
1. 确保 Go 服务端正在运行
在第一个终端窗口(go-server 目录):
应该看到:
2. 运行 TypeScript 客户端
在第二个终端窗口(ts-client 目录):
预期输出:
3. 运行完整测试套件
预期输出:
故障排查
问题 1: "protoc: command not found"
解决方案:
问题 2: "protoc-gen-go: program not found or is not executable"
解决方案:
问题 3: "Cannot find module '../generated/demogrpcpb'"
解决方案:
问题 4: "Connection refused" 或连接失败
解决方案:
- 确保 Go 服务端正在运行
- 检查端口 50051 是否被占用:
问题 5: Go 模块相关问题
解决方案:
问题 6: npm 依赖安装失败
解决方案:
问题 7: TypeScript 编译错误
解决方案:
在 tsconfig.json 中添加:
然后重新编译:
快速命令参考
Go 服务端命令
TypeScript 客户端命令
项目扩展建议
1. 添加新的 RPC 方法
- 编辑
proto/demo.proto添加新的 service 方法 - 重新生成代码(Go 和 TypeScript)
- 在
go-server/main.go中实现方法 - 在
ts-client/src/client.ts中添加客户端方法
2. 实现流式 RPC
gRPC 支持四种类型的 RPC:
- 简单 RPC(本教程使用的)
- 服务端流式 RPC
- 客户端流式 RPC
- 双向流式 RPC
3. 添加认证和授权
在生产环境中,建议使用 SSL/TLS 和认证机制。
4. 添加中间件
- 日志记录
- 指标收集
- 错误处理
- 请求追踪
5. 健康检查
实现 gRPC 健康检查协议,方便服务发现和负载均衡。
性能优化建议
- 连接池:复用 gRPC 连接
- 超时设置:为每个 RPC 调用设置合理的超时
- 重试机制:实现智能重试策略
- 负载均衡:使用 gRPC 的负载均衡功能
- 压缩:启用 gRPC 消息压缩
相关资源
总结
恭喜!🎉 您已经成功创建了一个完整的 gRPC 通信系统:
- ✅ 使用 Protocol Buffers 定义服务接口
- ✅ 实现了 Go gRPC 服务端
- ✅ 实现了 TypeScript gRPC 客户端
- ✅ 完成了端到端测试
这个示例展示了 gRPC 的基本用法,您可以在此基础上:
- 添加更多的服务方法
- 实现流式 RPC
- 添加认证和安全机制
- 集成到实际项目中
如果遇到任何问题,请参考故障排查部分,或查阅官方文档。