# grpc-demo **Repository Path**: CNtinker/grpc-demo ## Basic Information - **Project Name**: grpc-demo - **Description**: grpc-demo,从零grpc - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-12-09 - **Last Updated**: 2024-12-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 1、初始化项目 ``` npm init -y tsc --init ``` ## 2、安装依赖 ``` "@grpc/grpc-js": "^1.8.14", "grpc-tools": "~1.11.3", "grpc_tools_node_protoc_ts": "^5.3.3" ``` ## 3、编写 proto 文件 新建 test.proto 文件并编写 rpc 接口和请求响应类型 ``` syntax = "proto3"; package test; service Test { rpc SayTest (TestReq) returns (TestRes) {} } message TestReq { string name = 1; } message TestRes { string name = 1; } ``` ## 4、增加编译 proto 文件命令 ``` "gen": "grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./gen --grpc_out=grpc_js:./gen --ts_out=grpc_js:./gen ./test.proto", ``` ## 5、新建 gen 文件夹,执行 yarn gen 生成 js 和 ts 文件 ## 6、编写 Client 端和 Server 端代码 server ``` import { TestRes } from "./gen/test_pb"; import * as grpc from "@grpc/grpc-js"; import { TestService } from "./gen/test_grpc_pb"; const server = new grpc.Server(); server.addService(TestService, { sayTest(call: any, callback: any) { console.log(call.request.getName()); const res = new TestRes(); res.setName("Test " + call.request.getName()); callback(null, res); }, }); server.bindAsync("localhost:3333", grpc.ServerCredentials.createInsecure(), () => { server.start(); console.log("RPC服务启动"); }); ``` client ``` import { TestClient } from "./gen/test_grpc_pb"; import * as grpc from "@grpc/grpc-js"; import { TestReq } from "./gen/test_pb"; const client = new TestClient("localhost:3333", grpc.credentials.createInsecure()); const testReq = new TestReq(); testReq.setName("client"); client.sayTest(testReq, (err, message) => { console.log(message.getName()); }); ``` ## 7、启动客户端和服务端(记得全局安装 ts-node) ``` ts-node ./server.ts ts-node ./client.ts ```