endpoints/getting-started-grpc/server.js (40 lines of code) (raw):
// Copyright 2017 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
'use strict';
const path = require('path');
const PROTO_PATH = path.join(__dirname, '/protos/helloworld.proto');
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
});
const helloProto = grpc.loadPackageDefinition(packageDefinition).helloworld;
// Implement the SayHello RPC method.
const sayHello = (call, callback) => {
callback(null, {message: `Hello ${call.request.name}`});
};
// Start an RPC server to handle Greeter service requests
const startServer = PORT => {
const server = new grpc.Server();
server.addService(helloProto.Greeter.service, {sayHello: sayHello});
server.bindAsync(
`0.0.0.0:${PORT}`,
grpc.ServerCredentials.createInsecure(),
() => {
console.log(`gRPC server started on port ${PORT}`);
}
);
};
// The command-line program
const {argv} = require('yargs')
.usage('Usage: node $0 [-p PORT]')
.option('port', {
alias: 'p',
type: 'number',
default: 50051,
global: true,
})
.wrap(120)
.epilogue(
'For more information, see https://cloud.google.com/endpoints/docs'
);
startServer(argv.port);