快速入门
本指南通过一个简单的实际示例帮助您开始在 Node 中使用 gRPC。
快速入门
本指南通过一个简单的实际示例帮助您开始在 Node 中使用 gRPC。
先决条件
- Node 版本 8.13.0 或更高版本
下载示例
您需要示例代码的本地副本才能完成此快速入门。从我们的 GitHub 存储库下载示例代码(以下命令克隆整个存储库,但您只需此快速入门和其他教程的示例)
# Clone the repository to get the example code
git clone -b @grpc/[email protected] --depth 1 --shallow-submodules https://github.com/grpc/grpc-node
# Navigate to the node example
cd grpc-node/examples
# Install the example's dependencies
npm install
# Navigate to the dynamic codegen "hello, world" Node example:
cd helloworld/dynamic_codegen
运行 gRPC 应用程序
从 examples/helloworld/dynamic_codegen
目录
运行服务器
node greeter_server.js
从另一个终端,运行客户端
node greeter_client.js
恭喜!您刚刚使用 gRPC 运行了一个客户端-服务器应用程序。
更新 gRPC 服务
现在,让我们看看如何更新应用程序,在服务器上添加一个额外的方法供客户端调用。我们的 gRPC 服务是使用协议缓冲区定义的;您可以在 基础教程中了解更多关于如何在 .proto
文件中定义服务的信息。现在您只需要知道,服务器和客户端“存根”都有一个 SayHello
RPC 方法,该方法从客户端获取 HelloRequest
参数并从服务器返回 HelloReply
,并且此方法的定义如下
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
让我们更新一下,使 Greeter
服务有两个方法。编辑 examples/protos/helloworld.proto
,并使用一个新的 SayHelloAgain
方法更新它,请求和响应类型相同
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
// Sends another greeting
rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
记得保存文件!
更新并运行应用程序
我们现在有了一个新的服务定义,但我们仍然需要在示例应用程序的人工编写部分实现并调用新方法。
更新服务器
在同一目录下,打开 greeter_server.js
。像这样实现新方法
function sayHello(call, callback) {
callback(null, {message: 'Hello ' + call.request.name});
}
function sayHelloAgain(call, callback) {
callback(null, {message: 'Hello again, ' + call.request.name});
}
function main() {
var server = new grpc.Server();
server.addService(hello_proto.Greeter.service,
{sayHello: sayHello, sayHelloAgain: sayHelloAgain});
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
server.start();
});
}
更新客户端
在同一目录下,打开 greeter_client.js
。像这样调用新方法
function main() {
var client = new hello_proto.Greeter('localhost:50051',
grpc.credentials.createInsecure());
client.sayHello({name: 'you'}, function(err, response) {
console.log('Greeting:', response.message);
});
client.sayHelloAgain({name: 'you'}, function(err, response) {
console.log('Greeting:', response.message);
});
}
运行!
就像我们之前做的那样,从 examples/helloworld/dynamic_codegen
目录
运行服务器
node greeter_server.js
从另一个终端,运行客户端
node greeter_client.js
下一步
上次修改时间:2024 年 11 月 25 日:feat: 将 $ shell 行指示符移动到 scss (#1354) (ab8b3af)