I'm using gRPC to exchange messages between C++ and node.js. It works fine. But now I need to to do the same, but using a go implementation instead of node.js. I'm getting the following error when sending messages from the go client to the c++ server:
rpc error: code = Unavailable desc = error reading from server: EOF
The C++ server also crashes returning this:
terminate called after throwing an instance of 'boost::wrapexcept<boost::system::system_error>'
what(): syntax error
Aborted (core dumped)
The message looks like this
message Gossip
{
bytes message = 1;
bytes validator_key = 2;
}
The C++ server connection function
void
GossipMessageImpl::ConnectAndRun(void * overlay)
{
std::string server_address(gRPCport);
ServerBuilder builder;
builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
builder.RegisterService(&service_);
cq_ = builder.AddCompletionQueue();
server_ = builder.BuildAndStart();
JLOG(journal_.debug()) << "gRPC server listening on port " << gRPCport;
// Proceed to the server's main loop.
HandleRpcs(overlay);
pthread_exit(0);
}
The go client
var conn *grpc.ClientConn
conn, err = grpc.Dial("localhost:20052", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Fatalf("did not connect: %s", err)
}
defer conn.Close()
c := pb.NewGossipMessageClient(conn)
message := []byte("Hello")
validatorKey := []byte("World")
response, err := c.ToRippled(ctx, &pb.Gossip{Message: message, ValidatorKey: validatorKey})
if err != nil {
log.Fatalf("Error when calling ToRippled: %s", err)
}
log.Printf("Response from server: %s", response.Stream)
My suspicion is that I am mounting the message wrongly somehow, but I cannot find out what I'm doing wrong. The error only occurs when the message is sent, so it seems to be connecting successfully.
[bonus] The working node.js client
var client = new gossip_message.GossipMessage(target, grpc.credentials.createInsecure());
console.log(Date.now(), ' | gRPC | Chanel created');
var call = client.toRippled({message: message.data, validator_key: validator_key}, function(err, stream)
{
if (err)
{
console.log(err)
}
console.log(Date.now(), ' | gRPC-Client | Message from GSub node ID: ' + validator_key + ' sent to rippled server ');
});