Giter VIP home page Giter VIP logo

Comments (3)

jhump avatar jhump commented on June 8, 2024

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.

kohenkatz avatar kohenkatz commented on June 8, 2024

@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.

jhump avatar jhump commented on June 8, 2024

@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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.