Skip to content

04 The streaming client

Create stream-client.js to consume the SayHellos stream.

js
// stream-client.js
const { grpc, proto } = require("./load");

const client = new proto.Greeter(
  "localhost:50051",
  grpc.credentials.createInsecure(),
);

const call = client.SayHellos({ name: "Ada" });
call.on("data", (reply) => console.log(reply.message));
call.on("end", () => console.log("stream done"));
call.on("error", (err) => console.error("stream error:", err.message));

How it works

LineWhat it does
client.SayHellos(request)Starts the streaming call. Returns a readable stream — no callback.
call.on("data", fn)Fires for each HelloReply the server writes.
call.on("end", fn)Fires once after the server calls call.end().
call.on("error", fn)Fires on network errors or server-side status errors.

The streaming client API is event-driven. You listen for data events (one per call.write on the server side) and an end event that signals the stream is finished.

Checkpoint

With the server running (node server.js in another terminal):

bash
node stream-client.js

Expected output:

Hello, Ada
Hi, Ada
Hey, Ada
stream done

Three data events fire (one per call.write), then the end event fires.

Next: 05 Errors and status codes