Having created a local npm package for the protobuf files in my cluster, I can now install that package and use it in a gRPC server.
I install the package:
npm install --save <path to package>
And use it like I would any other installed npm package:
const { exportName } = require('<package name>');
For the gRPC server, I will use the Services export, since it the file that has the definitions for the operations that were defined.
So, my server ends up looking like this:
const grpc = require('@grpc/grpc-js'); const <service_name>Services = require('<package_name>'); const protoDescription = grpc.loadPackageDefinition(<service name>Services); // operation declarations as logic async function main() { const server = new grpc.Server(); server.addService(protoDescription.<name_of_service>.service, { // operations }); server.bindAsync( `0.0.0.0:${config.port}`, grpc.ServerCredentials.createInsecure(), err => { if(err) { console.error('err: ', err); } server.start(); console.log('Server Started'); } ); } main();
There is one major difference between using my generated file and directly using a proto file:
- When directly using a proto file, you need to import the proto file, create a
packageDefinition
using@grpc/proto-loader
, and feed that togrpc.loadPackageDefinition()
.
So the server file would look like this:
const grpc = require('@grpc/grpc-js'); const protoLoader = require('@grpc/proto-loader'); const PROTO_PATH = '<path_to_proto_file'; const packageDefinition = protoLoader.loadSync(PROTO_PATH); const protoDescription = grpc.loadPackageDefinition(packageDefinition); // operation declarations as logic async function main() { const server = new grpc.Server(); server.addService(protoDescription.<name_of_service>.service, { // operations }); server.bindAsync( `0.0.0.0:${config.port}`, grpc.ServerCredentials.createInsecure(), err => { if(err) { console.error('err: ', err); } server.start(); console.log('Server Started'); } ); } main();
The generated files skip this step, because I used the --grpc_out:generate_package_definition
flag for the grpc-tools
.
Top comments (0)