https://gist.github.com/robcecil/1f030e2c8bfa45b567128e50e2156dad
Running Node v11.10.0 on Ubuntu Comic 18.10. On Monday, March 11, 2019 at 2:30:13 PM UTC-4, Rob Cecil wrote: > > I updated everything: > > wander@peniche:~/control-web$ npm list --depth=0 2>/dev/null > [email protected] /home/wander/control-web > ├── @grpc/[email protected] > ├── [email protected] > ├── [email protected] > ├── [email protected] > ├── [email protected] > ├── [email protected] > ├── [email protected] > ├── [email protected] > └── [email protected] > > I still see the same behavior. > > If I change my server.,js: > > function main() { > var server = new grpc.Server(); > server.addService(test.Greeter.service, { > sayHello: SayHello, > sayHelp: SayHelp > }); > //console.dir(util.inspect(server, showHidden=false, depth=5, > colorize=false)); > server.bind(argv.h, grpc.ServerCredentials.createInsecure()); > server.start(); > } > > Restart, ... I see the same behavior. > > > On Monday, March 11, 2019 at 12:41:14 PM UTC-4, Michael Lumish wrote: >> >> Can you try updating your dependencies? I just tried running the given >> code with the latest versions of grpc and @grpc/proto-loader and it worked. >> There was previously an issue that the library would not accept method >> names with the same casing as in the original proto file, but that was >> fixed a while ago. >> >> As a side note, the `keepCase` option in `proto-loader` affects message >> field names. If it is not set, the field names are transformed to camel >> case. >> >> On Mon, Mar 11, 2019 at 8:14 AM 'Mya Pitzeruse' via grpc.io < >> [email protected]> wrote: >> >>> On the server side, try using lowercase names instead of title case: >>> >>> server.addService(test.Greeter.service, { >>> sayHello: SayHello, >>> sayHelp: SayHelp >>> }); >>> >>> I would assume that using "keepCase: true" meant that they would >>> require these to be the same as the proto. But here's an example where I >>> use the same loader semantic and the same casing: >>> >>> https://github.com/mjpitz/des/blob/master/api/extractor.proto#L19 >>> https://github.com/mjpitz/des/blob/master/api/extractor.js#L8 >>> >>> And all of my service methods are use camel case instead of the case I >>> used in the proto file: >>> >>> https://github.com/mjpitz/des/blob/master/src/service/unasyncify.ts#L9 >>> >>> >>> On Sat, Mar 9, 2019 at 10:08 AM Rob Cecil <[email protected]> wrote: >>> >>>> 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 >>>> >>>> <https://groups.google.com/d/msgid/grpc-io/3c7c48bc-3612-4c7e-9b30-9a30e47d1286%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> >>> -- >>> >>> Mya Pitzeruse >>> >>> Senior Software Engineer - Service Infrastructure >>> >>> Gender Pronouns: She, Her, Hers >>> >>> [email protected] >>> >>> >>> Indeed - We help people get jobs. >>> >>> Indeed.com <http://www.indeed.com/> >>> >>> Facebook <http://www.facebook.com/indeed> | >>> <http://www.twitter.com/indeed> >>> >> -- 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/9bcbda49-2257-4543-abc9-bc5b2600581d%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
