Node.js可以无需预编译proto文件,直接启动gRPC服务与客户端。用来做测试非常方便。
下面是三个主要的文件
- package.json (安装依赖不用多说)
{
"name": "grpc-examples",
"version": "0.1.0",
"dependencies": {
"async": "^1.5.2",
"google-protobuf": "^3.0.0",
"grpc": "^1.0.0",
"lodash": "^4.6.1",
"minimist": "^1.2.0"
}
}
- server.js
// 定义proto接口描述文件路径
var PROTO_PATH = __dirname + '/proto/helloworld.proto';
// 加载grpc模块
var grpc = require('grpc');
// 加载proto文件中helloworld包的配置
var hello_proto = grpc.load(PROTO_PATH).helloworld;
// 定义sayHello方法
function sayHello(call, callback) {
callback(null, {message: 'Node.js: ' + call.request.name});
}
// 主函数
function main() {
// 实例grpc服务
var server = new grpc.Server();
// 注册Greeter服务到grpc服务,并定义接口对应方法
server.addService(hello_proto.Greeter.service, {sayHello: sayHello});
// 绑定地址,并传入证书(这里是忽略验证)
server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
// 启动服务
server.start();
}
main();
- client.js
// proto文件路径
var PROTO_PATH = __dirname + '/proto/helloworld.proto';
var test_PATH = __dirname + '/proto/test.proto';
// 加载grpc模块
var grpc = require('grpc');
// 加载包配置
var hello_proto = grpc.load(PROTO_PATH).helloworld;
var test_proto = grpc.load(test_PATH).test;
// 主函数
function main() {
// 创建2个客户端
var client = new hello_proto.Greeter('localhost:8028',grpc.credentials.createInsecure());
var test = new test_proto.Waiter('127.0.0.1:8028',grpc.credentials.createInsecure());
// 定义请求参数 使用附带参数如果有 如: node client.js 123
var user;
if (process.argv.length >= 3) {
user = process.argv[2];
} else {
user = 'world';
}
// 调用接口方法
client.sayHello({name: user}, function(err, response) {
console.log('sayHello服务端返回: ', response.message);
});
// 调用接口方法
test.DoMax({ReqStr: user}, function(err, response) {
console.log('DoMax服务端返回: ', response.ResStr);
})
}
main();
网友评论