gRPC Implementation
Implementing gRPC server and client.
Node.js Server
const grpc = require("@grpc/grpc-js");
const protoLoader = require("@grpc/proto-loader");
Load proto file
const packageDef = protoLoader.loadSync("user.proto");
const userProto = grpc.loadPackageDefinition(packageDef).user;
Implement service
function getUser(call, callback) {
const user = {
id: call.request.id,
name: "John",
email: "[email protected]"
};
callback(null, user);
}
Create server
const server = new grpc.Server();
server.addService(userProto.UserService.service, { getUser });
server.bindAsync("0.0.0.0:50051",
grpc.ServerCredentials.createInsecure(),
() => server.start()
);
Node.js Client
const grpc = require("@grpc/grpc-js");
const protoLoader = require("@grpc/proto-loader");
Load proto
const packageDef = protoLoader.loadSync("user.proto");
const userProto = grpc.loadPackageDefinition(packageDef).user;
Create client
const client = new userProto.UserService(
"localhost:50051",
grpc.credentials.createInsecure()
);
Make request
client.getUser({ id: "123" }, (error, user) => {
if (error) console.error(error);
else console.log(user);
});
Streaming Example
Server streaming implementation
function listUsers(call) {
users.forEach(user => {
call.write(user);
});
call.end();
}
Client streaming consumption
const stream = client.listUsers({});
stream.on("data", (user) => {
console.log(user);
});
stream.on("end", () => {
console.log("Stream ended");
});
Error Handling
Server error
callback({
code: grpc.status.NOT_FOUND,
message: "User not found"
});
Client error handling
client.getUser({ id: "123" }, (error, user) => {
if (error) {
console.error("Error:", error.message);
return;
}
console.log(user);
});