Comments (3)
The first example (injecting this logic into generated code) would tightly couple the generated client stubs to the existing okhttp implementation. But the purpose of this being an interface (HTTPClientInterface
) is to allow other possible implementations and avoid such tight coupling.
The latter example (pushing the logic into the HTTPClientInterface
implementation) makes much more sense to me. However, it would need to be more clever than the example since the example builds a new client for each RPC, which will be inefficient since it prevents client re-use and connection pooling and would require more logic around connection/client clean-up when each RPC completes.
So a little more exploration is needed to come up with how we might apply an idea similar to the latter example, but still able to re-use clients and pool connections. We also need to make sure the solution doesn't cause resource leaks: okhttp clients are heavyweight and stateful (using both network connections as well as worker threads in a thread pool) and need to be closed/freed when no longer needed. If the solution involves the ConnectOkHttpClient
needing to create one or more clients, it must also expose a way to close them and safely shut them down.
from connect-kotlin.
@jhump The first example is my interim workaround - I did not expect that it would be the correct way to do it long term. Given that the code has changed quite a bit since I first raised this issue, I will see if I can take a fresh look at it to try to suggest another way to do this.
from connect-kotlin.
@kohenkatz, I believe this is still an issue. The HTTPClientInterface
and ConnectOkHttpClient
types have not changed that much.
BTW, one downside to having this be automatic/implicit (i.e. based on detecting the gRPC protocol, as in the example) is that it means different configuration would be needed in order to use H2C with gRPC-Web and Connect protocol traffic. That inconsistency (that sometimes H2C is used when not explicitly requested, but not always) could be a source of confusion/surprise.
from connect-kotlin.
Related Issues (20)
- Can GoogleJavaJSONStrategy be added for javalite? HOT 1
- Fix javadoc artifacts
- ClientOnlyStream.receiveAndClose(): Cancellation Exception occurring HOT 6
- Determine API for exposing response headers/trailers for streaming calls HOT 2
- GzipCompressionPool decompress fails with EOFException on empty Buffer
- Kotlin Multiplatform support HOT 1
- server streaming for `grpc-web` is not working HOT 3
- URL assembly issue HOT 2
- Using the Android Studio network inspector crashes the app when performing streaming calls HOT 4
- Streaming calls are missing the request body when flipper network interceptor is active HOT 1
- Update connect-kotlin code generation to run within Gradle build
- [Question] connect-kotlin v0.5.0 release plan HOT 2
- Migrate code generation to use remote plugins
- Timeout and deadline propagation issues
- Client should verify response content-type
- Issues related to gRPC "trailers only" responses
- Generated code does not map optional fields to Kotlin nullable variables
- java.lang.IllegalStateException: trailers not available HOT 3
- ServerOnlyStreamInterface::sendAndClose does not raise exceptions HOT 3
- Sources can't be downloaded by IDEA Android Studio / Intellij
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 connect-kotlin.