-
Notifications
You must be signed in to change notification settings - Fork 355
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Option to use fetch
instead of XMLHttpRequest
for polling
#716
Labels
enhancement
New feature or request
Milestone
Comments
I also have this need currently. |
We could indeed let the user overrides the list of available low-level transports. Not sure how it could work with tree-shaking though. |
darrachequesne
added a commit
that referenced
this issue
Apr 23, 2024
Usage: ```js import { Socket, transports, Fetch } from "engine.io-client"; transports.polling = Fetch; const socket = new Socket("https://example.com"); ``` Note: tree-shaking unused transports is not currently supported and will be added later. Related: - socketio/socket.io#4980 - #716
darrachequesne
added a commit
that referenced
this issue
May 31, 2024
This commit adds the ability to provide a list of transport implementations to use when connecting to an Engine.IO server. This can be used to use HTTP long-polling based on `fetch()`, instead of the default implementation based on the `XMLHttpRequest` object. ``` import { Socket, Fetch, WebSocket } from "engine.io-client"; const socket = new Socket({ transports: [Fetch, WebSocket] }); ``` This is useful in some environments that do not provide a `XMLHttpRequest` object, like Chrome extension background scripts. > XMLHttpRequest() can't be called from a service worker, extension or otherwise. Replace calls from your background script to XMLHttpRequest() with calls to global fetch(). Source: https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers#replace-xmlhttprequest Related: - #716 - socketio/socket.io#4980 This is also useful when running the client with Deno or Bun, as it allows to use the built-in `fetch()` method and `WebSocket` object, instead of using the `xmlhttprequest-ssl` and `ws` Node.js packages. Related: socketio/socket.io-deno#12 This feature also comes with the ability to exclude the code related to unused transports (a.k.a. "tree-shaking"): ```js import { SocketWithoutUpgrade, WebSocket } from "engine.io-client"; const socket = new SocketWithoutUpgrade({ transports: [WebSocket] }); ``` In that case, the code related to HTTP long-polling and WebTransport will be excluded from the final bundle. Related: socketio/socket.io#4393
You can now use import { Socket, Fetch, WebSocket } from "engine.io-client";
const socket = new Socket({
transports: [Fetch, WebSocket]
}); Included in version 6.6.0. |
Very nice! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Is your feature request related to a problem? Please describe.
Some environments don't support
XMLHttpRequest
, but supportfetch
.(e.g., MetaMask Snaps)
Describe the solution you'd like
It would be great if there was an option for using
fetch
insteadXMLHttpRequest
.Describe alternatives you've considered
There seems to be a way to solve this problem via a postinstall patch (as described in the article linked above), but native support would be favored.
The text was updated successfully, but these errors were encountered: