Fixing streaming by migrating to Typhoeus #12
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
New option to customize Faraday adapter:
New option to set service version:
Why is Typhoeus the default rather than being used only for streaming with server-sent events?
I prefer using a single adapter for all use cases to ensure a consistent experience across different scenarios, e.g., to avoid having different timeout behaviors due to an unknown change of adapters under the hood. But, users can still choose another adapter if they want to.
Why Typhoeus?
Faraday's default adapter (Net::HTTP), specifically for the peculiar way that Google implements streaming in their APIs, is not capable of actually streaming data. We need an adapter with support for Response Streaming + Parallel Requests, which leads to the following options:
async-http adds async, which feels like adding an extra layer of dependency and potential complexity (
Async do
) unnecessary to the gem.httpx seems promising, but for some reason, it does not work out of the box for the purpose of understanding Google's particular way of streaming.
Typhoeus just works out of the box, backed by
libcurl
that is something widely available and supported. Both timeouts and image/video modes work as expected.