Back to snippets
grpc_nodejs_hello_world_unary_rpc_server.ts
typescriptA basic gRPC server that implements a "SayHello" unary RPC service.
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);