import ballerina/io;
import ballerina/log;
import ballerina/grpc;
endpoint grpc:Service ep {
    host:"localhost",
    port:9090
};@grpc:serviceConfig {generateClientConnector:false}
service<grpc:Listener> HelloWorld bind ep {    @grpc:resourceConfig {streaming:true}
    lotsOfReplies (endpoint client, string name) {
        log:printInfo("Server received hello from " + name);
        string[] greets = ["Hi", "Hey", "GM"];
        foreach greet in greets {
            log:printInfo("send reply: " + greet + " " + name);
            grpc:ConnectorError err = client -> send(greet + " " + name);
            if (err != ()) {
                io:println("Error at lotsOfReplies : " + err.message);
            }
        }
        _ = client -> complete();
        log:printInfo("send all responses sucessfully.");
    }}

gRPC Server Streaming

The gRPC Server Connector can be used to expose service gRPC service over http2. This sample is to demonstrate gRPC server streaming service interacting with gRPC non-blocking client.

import ballerina/io;
import ballerina/log;
import ballerina/grpc;

This is server implementation for server streaming scenario

endpoint grpc:Service ep {
    host:"localhost",
    port:9090
};

Server endpoint configuration

@grpc:serviceConfig {generateClientConnector:false}
service<grpc:Listener> HelloWorld bind ep {
    @grpc:resourceConfig {streaming:true}
    lotsOfReplies (endpoint client, string name) {
        log:printInfo("Server received hello from " + name);
        string[] greets = ["Hi", "Hey", "GM"];
        foreach greet in greets {
            log:printInfo("send reply: " + greet + " " + name);
            grpc:ConnectorError err = client -> send(greet + " " + name);
            if (err != ()) {
                io:println("Error at lotsOfReplies : " + err.message);
            }
        }
        _ = client -> complete();
        log:printInfo("send all responses sucessfully.");
    }

Once all messages are sent, server send complete message to notify the client, I’m done.

}
$ ballerina run grpc-server-streaming.bal
ballerina: initiating service(s) in 'grpc-server-streaming.bal'

Run the service

ballerina run client.balx

Run client connector