I'm experienced with Grpc - having built iOS/ObjC front-end and C# backend
over a two year period (a Grpc project consisting of a main proto with a
service that has 27 methods, and about a dozen supporting protos for
message definitions).
I am however, not super experienced with web development, so I am a little
frustrated atm, trying to get simple things to work with Grpc-node. I
started with something simple - the HelloWorld example and modified it from
there.
Here is my current "test.proto":
syntax = "proto3";
package helloworld;
service Greeter {
rpc SayHello(FooBarRequest) returns (FooBarReply);
rpc SayHelp(FooBarRequest) returns (FooBarReply);
}
message FooBarRequest {
string name = 1;
}
message FooBarReply {
string message = 1;
}
server.js:
const _ = require('lodash');
const grpc = require('grpc');
const protoLoader = require('@grpc/proto-loader');
const argv = require("minimist")(process.argv.slice(2));
console.dir(argv);
if (!argv.h) {
console.log("Please start server.js with -h xx.xx.xx.xx:xxxx");
process.exit(1);
}
console.log(`Starting server.js on : ${argv.h}`);
const PROTOS_PATH = __dirname + '/../protos/';
const BESERVICE_PROTO_PATH = PROTOS_PATH + 'test.proto';
const beDefinition = protoLoader.loadSync(
BESERVICE_PROTO_PATH,
{keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
const test = grpc.loadPackageDefinition(beDefinition).helloworld;
function SayHello(call, callback) {
callback(null, {message: 'Hello ' + call.request.name});
}
function SayHelp(call, callback) {
callback(null, {message: 'Help! ' + call.request.name});
}
function main() {
var server = new grpc.Server();
server.addService(test.Greeter.service, {
SayHello: SayHello,
SayHelp: SayHelp
});
server.bind(argv.h, grpc.ServerCredentials.createInsecure());
server.start();
}
main();
client.js:
const grpc = require('grpc');
const util = require('util')
const protoLoader = require('@grpc/proto-loader');
const argv = require("minimist")(process.argv.slice(2));
console.dir(argv);
if (!argv.h) {
console.log("Please start with -h xx.xx.xx.xx:xxxx");
process.exit(1);
}
console.log(`Starting Node backend client on : ${argv.h}`);
const PROTOS_PATH = __dirname + '/../protos/';
const BESERVICE_PROTO_PATH = PROTOS_PATH + 'test.proto';
const beDefinition = protoLoader.loadSync(
BESERVICE_PROTO_PATH,
{keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
const test = grpc.loadPackageDefinition(beDefinition).helloworld;
function main() {
var client = new test.Greeter(argv.h, grpc.credentials.createInsecure
());
client.SayHello({ name: 'Darth' }, {}, (err, response) => {
if (err) {
console.error("error calling SayHello", err);
return
}
console.log('Greeting:', response.message);
client.SayHelp({ name: 'Darth' }, {}, (err, response) => {
if (err) {
console.error("error calling SayHelp", err);
return
}
console.log('Help! ', response.message);
});
});
}
main();
I run the client and server on the same machine, using the same command
line argument for the same host & port.
Can anyone explain why I get "RPC method not implemented" on the second
method defined in the Greeter service above?
wander@peniche:~/control-web/js$ !1186
node server.js -h 172.16.0.168:9090 &
[1] 57465
wander@peniche:~/control-web/js$ { _: [], h: '172.16.0.168:9090' }
Starting server.js on : 172.16.0.168:9090
wander@peniche:~/control-web/js$ !1187
node backendservice-node-client.js -h 172.16.0.168:9090
{ _: [], h: '172.16.0.168:9090' }
Starting Node backend client on : 172.16.0.168:9090
Greeting: Hello! Darth
error calling SayHelp { Error: 12 UNIMPLEMENTED: RPC method not implemented
/helloworld.Greeter/SayHelp
at Object.exports.createStatusError (/home/wander/control-web/
node_modules/grpc/src/common.js:91:15)
at Object.onReceiveStatus (/home/wander/control-web/node_modules/grpc/
src/client_interceptors.js:1204:28)
at InterceptingListener._callNext (/home/wander/control-web/node_modules
/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.onReceiveStatus (/home/wander/control-web/
node_modules/grpc/src/client_interceptors.js:618:8)
at callback (/home/wander/control-web/node_modules/grpc/src/
client_interceptors.js:845:24)
code: 12,
metadata: Metadata { _internal_repr: {} },
details: 'RPC method not implemented /helloworld.Greeter/SayHelp' }
If i remove the SayHelp method in the proto and update the client & server
code, it works fine.
THANKS
--
You received this message because you are subscribed to the Google Groups
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit
https://groups.google.com/d/msgid/grpc-io/3c7c48bc-3612-4c7e-9b30-9a30e47d1286%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.