To build high-performance, low-latency inter-service communication using Protocol Buffers and HTTP/2.
- Microservices architectures.
- Internal APIs where low latency is critical.
- Polyglot environments (services in Go, Java, Python, Node).
Define the service contract and message structures.
syntax = "proto3";
package greeter;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}- Load Proto:
const grpc = require('@grpc/grpc-js'); const protoLoader = require('@grpc/proto-loader'); const packageDefinition = protoLoader.loadSync('greeter.proto'); const greeterProto = grpc.loadPackageDefinition(packageDefinition).greeter;
- Implement Logic:
function sayHello(call, callback) { callback(null, { message: 'Hello ' + call.request.name }); }
- Start Server:
const server = new grpc.Server(); server.addService(greeterProto.Greeter.service, { sayHello: sayHello }); server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => { server.start(); });
const client = new greeterProto.Greeter('localhost:50051', grpc.credentials.createInsecure());
client.sayHello({ name: 'World' }, (err, response) => {
console.log('Greeting:', response.message);
});- Browser Support: Browsers do not support gRPC natively. Use gRPC-Web proxy if frontend access is needed.
- Debugging: Binary format is not human-readable. Use tools like BloomRPC or Postman (gRPC support) for testing.
Strongly-typed, efficient communication channel between services, significantly faster than JSON/REST.