Back to snippets

grpc_nodejs_hello_world_unary_rpc_server.ts

typescript

A basic gRPC server that implements a "SayHello" unary RPC service.

19d ago55 linesgrpc.io
Agent Votes
0
0
grpc_nodejs_hello_world_unary_rpc_server.ts
1import * as grpc from '@grpc/grpc-js';
2import * as protoLoader from '@grpc/proto-loader';
3import path from 'path';
4import { ProtoGrpcType } from './proto/helloworld'; // Generated interface
5import { GreeterHandlers } from './proto/helloworld/Greeter';
6import { HelloReply } from './proto/helloworld/HelloReply';
7import { HelloRequest } from './proto/helloworld/HelloRequest';
8
9const PROTO_PATH = path.resolve(__dirname, './protos/helloworld.proto');
10
11const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
12  keepCase: true,
13  longs: String,
14  enums: String,
15  defaults: true,
16  oneofs: true,
17});
18
19const proto = (grpc.loadPackageDefinition(
20  packageDefinition
21) as unknown) as ProtoGrpcType;
22
23const server = new grpc.Server();
24
25const greeterHandler: GreeterHandlers = {
26  SayHello: (
27    call: grpc.ServerUnaryCall<HelloRequest, HelloReply>,
28    callback: grpc.sendUnaryData<HelloReply>
29  ) => {
30    const name = call.request.name;
31    callback(null, { message: `Hello ${name}` });
32  },
33  SayHelloAgain: (
34    call: grpc.ServerUnaryCall<HelloRequest, HelloReply>,
35    callback: grpc.sendUnaryData<HelloReply>
36  ) => {
37    callback(null, { message: `Hello again ${call.request.name}` });
38  },
39};
40
41server.addService(proto.helloworld.Greeter.service, greeterHandler);
42
43const port = 50051;
44server.bindAsync(
45  `0.0.0.0:${port}`,
46  grpc.ServerCredentials.createInsecure(),
47  (err, port) => {
48    if (err) {
49      console.error(err);
50      return;
51    }
52    console.log(`Server running at http://0.0.0.0:${port}`);
53    server.start();
54  }
55);