前言
grpc 是谷歌开源的高性能跨语言 rpc 框架,它的目标是让客户端应用像调用本地函数一样调用服务器端的方法,支持多种编程语言,包括:c++、python、java、go、node.js 等语言。
在 node.js 中使用 grpc 可以极大地方便我们进行服务端和客户端的交互,并且在保证高性能的同时,也可以提供数据安全和保密性,本文将介绍如何使用 node.js 搭建 grpc 服务端和客户端。
第一步:安装 node.js 和 grpc
首先,需要确保本地已经安装了 node.js 和 npm。然后,在终端输入以下命令安装 grpc:
npm install -g grpc
安装完成后,你可以在 package.json 文件中看到 grpc 的版本信息。
第二步:定义.proto文件
grpc 通过 proto-file 定义服务,该文件用于定义服务的接口、消息格式等等。下面我们先定义一个简单的服务,让客户端向服务端发送一个消息,收到消息后返回一个已修改的消息。创建一个名为 example.proto 的文件,定义以下内容:
syntax = "proto3";package example;service example { rpc modifymessage (message) returns (message){}}message message { string content = 1;}
第三步:生成代码
在 example.proto 文件所在的目录中运行以下命令,生成相应的代码:
grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./ --grpc_out=./ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` example.proto
这里使用了 grpc_tools_node_protoc 生成 node.js 所需的代码,并指定了输出目录。
生成的代码包括:example_pb.js 和 example_grpc_pb.js。
第四步:实现服务端
服务器端代码如下:
const grpc = require("grpc");const example = require("./example_pb");const exampleservice = require("./example_grpc_pb");const server = new grpc.server();function modifymessage(call, callback) { const response = new example.message(); response.setcontent(call.request.getcontent().touppercase()); callback(null, response);}server.addservice(exampleservice.exampleservice, { modifymessage: modifymessage,});server.bind("localhost:50051", grpc.servercredentials.createinsecure());console.log("server running at http://localhost:50051");server.start();
在这个例子中,服务端新建了一个 grpc 服务器,并在该服务器上添加了一个名为 modifymessage 的方法。该方法接收一个 message 对象作为参数,将 message 对象中的 content 字段转换为大写并返回。
最后,我们使用 bind() 方法将服务绑定到 localhost:50051,并启动服务器。
第五步:实现客户端
客户端代码如下:
const grpc = require("grpc");const example = require("./example_pb");const exampleservice = require("./example_grpc_pb");const client = new exampleservice.exampleclient( "localhost:50051", grpc.credentials.createinsecure());const request = new example.message();request.setcontent("hello world!");client.modifymessage(request, function (err, response) { console.log("modified message: ", response.getcontent());});
在这个例子中,我们创建了一个 exampleclient 对象,并使用它的 modifymessage() 方法向服务端发送一个 message 对象。最后,我们输出服务端的响应,该响应已经将字符串中的字母转换为大写字母。
第六步:运行服务
现在,我们只需要在服务器代码所在的目录中使用以下命令启动服务:
node server.js
然后,在客户端代码所在的目录中运行以下命令:
node client.js
你应该会看到以下输出:
modified message: hello world!
至此,我们已经成功地实现了一个基础的 grpc 服务端和客户端的交互过程。
总结
本文介绍了如何使用 node.js 搭建 grpc 服务端和客户端,并在创建服务和建立连接之间使用 protobuf 定义了数据结构和消息格式。grpc 是一个功能强大的跨语言 rpc 框架,对于需要在客户端和服务端之间快速传输数据的应用非常有用。
以上就是nodejs搭建grpc的详细内容。