Comments (10)
This is a little different from the actual code we're trying to write, but here's an example:
https://github.com/esnet/test-grpc-streaming
The watchMetric() rpc is here, and shows the problem:
https://github.com/esnet/test-grpc-streaming/blob/master/example_pb_service.d.ts#L36
There's a build script build_protos.sh that has the command I used to build those. Hopefully this is enough to have a look at it.
Thanks!
from ts-protoc-gen.
from ts-protoc-gen.
Thanks for raising @pjm17971 and sorry to hear you are encountering difficulties. It's very possible that we have a gap in our test-coverage here - would you be in a position to create a repro case (preferably as a test)?
Thanks.
from ts-protoc-gen.
Hi @pjm17971 , sorry for the delay in getting back to you and thank you for creating such a thorough repro case for me.
So if you look at the generated javascript for the service you will see the root cause of the error:
Watcher.prototype.watchMetric = function watchMetric() {
throw new Error("Client streaming is not currently supported");
}
This is a throw back to a previous version of grpc-web which didn't provide support for client-side streaming; support was added in [email protected] via the websocket transport.
ts-protoc-gen needs to be updated to provide support for this new functionality; I will convert your issue's title and summary to reflect that.
Thanks, and sorry for the inconvenience.
from ts-protoc-gen.
If I've read the docs correctly then the API should closely resemble the grpc-node
one and will look something like this:
- Client Side Streaming *
const client = doClientStream(...)
client.on('metadata', (metadata) => { /* handle metadata */ });
client.on('status', (status) => { /* handle grpc status when stream is closed */ });
client.write(/* some data */);
client.write(/* some data */);
client.end(); // complete sending data.
client.cancel(); // cancel the stream from the client.
- Bidirectional Streaming *
const client = doClientBidiStream(...)
client.on('data', (msg) => { /* hande incoming data */ });
client.on('metadata', (metadata) => { /* handle metadata */ });
client.on('status', (status) => { /* handle grpc status when stream is closed */ });
client.write(/* send some data */);
client.write(/* send some more data */);
client.end(); // close the stream
client.cancel(); // cancel the stream from the client.
Feedback welcome from those who have used the grpc-node API in anger, please!
from ts-protoc-gen.
This API looks great to me! Would love to see an implementation, or can try and send a PR in a few days.
from ts-protoc-gen.
Thanks for looking at this @jonnyreeves. I think this API looks good. Really looking forward to being able to use this.
from ts-protoc-gen.
Being worked in on #82
from ts-protoc-gen.
One thing to note is that with the above API ClientStreams open the connection to the server when the first message is sent, where-as BiDiStreams will open the connection to the server immediately - Please let me know if this is undesirable
from ts-protoc-gen.
Any progress on this one?
from ts-protoc-gen.
Related Issues (20)
- d.ts files not generated HOT 4
- setXX() method return type is wrong in .d.ts file HOT 1
- proto3 - required / optional fields HOT 4
- Could we support friendlier object-literal syntax for service methods? HOT 1
- Fix TypeScript annotations for setters HOT 4
- Error: 13 INTERNAL: Request message serialization failure: Expected argument of type xxx HOT 3
- OnHeaders callback is not accessible. HOT 2
- How to deal with extensions? HOT 1
- Bad TS types for proto3 optional fields HOT 1
- Generate grpc-web code that use import than require HOT 5
- Error of protoc compiles FieldOption when using a enum from other proto
- Why is there no off() method on ResponseStream ?
- Does it support generating ES6 specification JS files and using them in grPC-Web
- protobuf v21 can't find protoc-gen-js HOT 3
- Module not found error while importing from _pb.d.ts file
- Getting the string name of Protobuf object
- Trailing underscore, toObject produces object that does not conform to AsObject
- The proper user code
- no set method TS types for proto3 Map field
- Typing for repeated extension fields generated incorrectly
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ts-protoc-gen.