Skip to content

[Flight] Add Debug Channel option for stateful connection to the backend in DEV #33627

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

Merged
merged 6 commits into from
Jun 24, 2025

Conversation

sebmarkbage
Copy link
Collaborator

@sebmarkbage sebmarkbage commented Jun 24, 2025

This adds plumbing for opening a stream from the Flight Client to the Flight Server so it can ask for more data on-demand. In this mode, the Flight Server keeps the connection open as long as the client is still alive and there's more objects to load. It retains any depth limited objects so that they can be asked for later. In this first PR it just releases the object when it's discovered on the server and doesn't actually lazy load it yet. That's coming in a follow up.

This strategy is built on the model that each request has its own channel for this. Instead of some global registry. That ensures that referential identity is preserved within a Request and the Request can refer to previously written objects by reference.

The fixture implements a WebSocket per request but it doesn't have to be done that way. It can be multiplexed through an existing WebSocket for example. The current protocol is just a Readable(Stream) on the server and WritableStream on the client. It could even be sent through a HTTP request body if browsers implemented full duplex (which they don't).

This PR only implements the direction of messages from Client to Server. However, I also plan on adding Debug Channel in the other direction to allow debug info (optionally) be sent from Server to Client through this channel instead of through the main RSC request. So the debugChannel option will be able to take writable or readable or both.

@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Jun 24, 2025
@sebmarkbage sebmarkbage changed the title [Flight] Add Debug Channel option for stateful connection to the backend for debugging [Flight] Add Debug Channel option for stateful connection to the backend in DEV Jun 24, 2025
For now it just immediately releases objects that are decoded.
The API is prepared to accept duplex streams to allow debug info to be sent
through this channel.

Add WebSocket support to the Server Bindings

This is a slightly different protocol than Duplex but likely to be commonly
used.
@@ -42,12 +43,31 @@ type CallServerCallback = <A, T>(string, args: A) => Promise<T>;

export type Options = {
callServer?: CallServerCallback,
debugChannel?: {writable?: WritableStream, ...},
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Notably the client is currently only included in the Browser builds. I guess in theory it could be useful to have a live connection between servers too.

This accepts a writable: WritableStream which is the shape that is provided by the modern WebSocketStream API. It's aligned with all our other modern usages for browsers - Web Streams.

Unfortunately WebSocketStream is not available in Safari or Firefox so those need a polyfill. I didn't add support for the more widely supported WebSocket API since that would also affect the readable directly where we stopped supporting the XHR shape. So this is just left up to user space for now to polyfill or use a different transport protocol.

Ironically the WebSocket shape is commonly in Node.js and it has similar but not exact shape as Node Streams so I added support for the Web shape of WebSocket in Node.

@@ -104,6 +125,7 @@ function startReadingFromStream(
}

export type Options = {
debugChannel?: {writable?: WritableStream, ...},
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@devongovett You might want to remove these options and instead just wire it up automatically in development to any HMR sockets in Parcel automatically on both ends.

@react-sizebot
Copy link

react-sizebot commented Jun 24, 2025

Comparing: 12eaef7...598ff08

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.js = 6.68 kB 6.68 kB +0.11% 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 530.57 kB 530.57 kB = 93.67 kB 93.67 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB +0.16% 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 651.66 kB 651.66 kB = 114.78 kB 114.78 kB
facebook-www/ReactDOM-prod.classic.js = 674.81 kB 674.81 kB = 118.77 kB 118.78 kB
facebook-www/ReactDOM-prod.modern.js = 665.30 kB 665.30 kB = 117.19 kB 117.19 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +9.01% 2.89 kB 3.15 kB +6.47% 0.90 kB 0.96 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +9.01% 2.89 kB 3.15 kB +6.47% 0.90 kB 0.96 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +9.01% 2.89 kB 3.15 kB +6.47% 0.90 kB 0.96 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +6.14% 2.23 kB 2.37 kB +3.99% 0.80 kB 0.83 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +6.14% 2.23 kB 2.37 kB +3.99% 0.80 kB 0.83 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +6.14% 2.23 kB 2.37 kB +3.99% 0.80 kB 0.83 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +4.36% 162.88 kB 169.98 kB +4.38% 29.69 kB 31.00 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +4.36% 162.88 kB 169.98 kB +4.38% 29.69 kB 31.00 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +4.19% 169.71 kB 176.82 kB +4.30% 30.76 kB 32.08 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +4.19% 169.71 kB 176.82 kB +4.30% 30.76 kB 32.08 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +4.16% 170.86 kB 177.97 kB +4.24% 31.05 kB 32.37 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +4.16% 170.86 kB 177.97 kB +4.24% 31.05 kB 32.37 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +4.16% 170.92 kB 178.02 kB +4.22% 31.07 kB 32.38 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +4.16% 170.92 kB 178.02 kB +4.22% 31.07 kB 32.38 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +3.88% 183.23 kB 190.34 kB +3.89% 33.55 kB 34.86 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +3.74% 190.07 kB 197.17 kB +3.85% 34.66 kB 36.00 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +3.73% 158.21 kB 164.12 kB +4.06% 29.23 kB 30.42 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +3.73% 158.21 kB 164.12 kB +4.06% 29.23 kB 30.42 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +3.72% 191.22 kB 198.32 kB +3.82% 34.95 kB 36.29 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +3.71% 191.27 kB 198.38 kB +3.82% 34.96 kB 36.30 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +3.31% 178.57 kB 184.48 kB +3.54% 33.09 kB 34.26 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +3.30% 153.76 kB 158.84 kB +3.56% 28.37 kB 29.38 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +3.30% 153.76 kB 158.84 kB +3.56% 28.37 kB 29.38 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +3.23% 157.46 kB 162.54 kB +3.43% 28.87 kB 29.86 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +3.23% 157.46 kB 162.54 kB +3.43% 28.87 kB 29.86 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +3.14% 161.60 kB 166.68 kB +3.44% 29.75 kB 30.77 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +3.14% 161.60 kB 166.68 kB +3.44% 29.75 kB 30.77 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +3.14% 161.89 kB 166.97 kB +3.42% 29.87 kB 30.90 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +3.13% 162.14 kB 167.22 kB +3.42% 29.87 kB 30.90 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +3.13% 162.14 kB 167.22 kB +3.42% 29.87 kB 30.90 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +3.13% 165.31 kB 170.48 kB +3.37% 30.26 kB 31.27 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +3.13% 165.31 kB 170.48 kB +3.37% 30.26 kB 31.27 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js +3.11% 115.01 kB 118.59 kB +3.13% 21.15 kB 21.82 kB
oss-stable/react-server/cjs/react-server-flight.development.js +3.11% 115.01 kB 118.59 kB +3.13% 21.15 kB 21.82 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +3.07% 165.34 kB 170.42 kB +3.34% 30.25 kB 31.26 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +3.07% 165.34 kB 170.42 kB +3.34% 30.25 kB 31.26 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +3.06% 165.94 kB 171.02 kB +3.33% 30.40 kB 31.41 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +2.99% 169.73 kB 174.81 kB +3.24% 31.24 kB 32.26 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +2.98% 170.27 kB 175.35 kB +3.20% 31.38 kB 32.38 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +2.98% 173.79 kB 178.96 kB +3.19% 31.79 kB 32.81 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +2.92% 173.82 kB 178.90 kB +3.17% 31.79 kB 32.79 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +2.90% 123.12 kB 126.70 kB +2.91% 22.60 kB 23.25 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +9.01% 2.89 kB 3.15 kB +6.47% 0.90 kB 0.96 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +9.01% 2.89 kB 3.15 kB +6.47% 0.90 kB 0.96 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-server.development.js +9.01% 2.89 kB 3.15 kB +6.47% 0.90 kB 0.96 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +6.14% 2.23 kB 2.37 kB +3.99% 0.80 kB 0.83 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +6.14% 2.23 kB 2.37 kB +3.99% 0.80 kB 0.83 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-client.development.js +6.14% 2.23 kB 2.37 kB +3.99% 0.80 kB 0.83 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +4.36% 162.88 kB 169.98 kB +4.38% 29.69 kB 31.00 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +4.36% 162.88 kB 169.98 kB +4.38% 29.69 kB 31.00 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +4.19% 169.71 kB 176.82 kB +4.30% 30.76 kB 32.08 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +4.19% 169.71 kB 176.82 kB +4.30% 30.76 kB 32.08 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +4.16% 170.86 kB 177.97 kB +4.24% 31.05 kB 32.37 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +4.16% 170.86 kB 177.97 kB +4.24% 31.05 kB 32.37 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +4.16% 170.92 kB 178.02 kB +4.22% 31.07 kB 32.38 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +4.16% 170.92 kB 178.02 kB +4.22% 31.07 kB 32.38 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +3.88% 183.23 kB 190.34 kB +3.89% 33.55 kB 34.86 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +3.74% 190.07 kB 197.17 kB +3.85% 34.66 kB 36.00 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +3.73% 158.21 kB 164.12 kB +4.06% 29.23 kB 30.42 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +3.73% 158.21 kB 164.12 kB +4.06% 29.23 kB 30.42 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +3.72% 191.22 kB 198.32 kB +3.82% 34.95 kB 36.29 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +3.71% 191.27 kB 198.38 kB +3.82% 34.96 kB 36.30 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +3.31% 178.57 kB 184.48 kB +3.54% 33.09 kB 34.26 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +3.30% 153.76 kB 158.84 kB +3.56% 28.37 kB 29.38 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +3.30% 153.76 kB 158.84 kB +3.56% 28.37 kB 29.38 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +3.23% 157.46 kB 162.54 kB +3.43% 28.87 kB 29.86 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +3.23% 157.46 kB 162.54 kB +3.43% 28.87 kB 29.86 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +3.14% 161.60 kB 166.68 kB +3.44% 29.75 kB 30.77 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +3.14% 161.60 kB 166.68 kB +3.44% 29.75 kB 30.77 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +3.14% 161.89 kB 166.97 kB +3.42% 29.87 kB 30.90 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +3.13% 162.14 kB 167.22 kB +3.42% 29.87 kB 30.90 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +3.13% 162.14 kB 167.22 kB +3.42% 29.87 kB 30.90 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +3.13% 165.31 kB 170.48 kB +3.37% 30.26 kB 31.27 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +3.13% 165.31 kB 170.48 kB +3.37% 30.26 kB 31.27 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js +3.11% 115.01 kB 118.59 kB +3.13% 21.15 kB 21.82 kB
oss-stable/react-server/cjs/react-server-flight.development.js +3.11% 115.01 kB 118.59 kB +3.13% 21.15 kB 21.82 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +3.07% 165.34 kB 170.42 kB +3.34% 30.25 kB 31.26 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +3.07% 165.34 kB 170.42 kB +3.34% 30.25 kB 31.26 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +3.06% 165.94 kB 171.02 kB +3.33% 30.40 kB 31.41 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +2.99% 169.73 kB 174.81 kB +3.24% 31.24 kB 32.26 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +2.98% 170.27 kB 175.35 kB +3.20% 31.38 kB 32.38 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +2.98% 173.79 kB 178.96 kB +3.19% 31.79 kB 32.81 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +2.92% 173.82 kB 178.90 kB +3.17% 31.79 kB 32.79 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +2.90% 123.12 kB 126.70 kB +2.91% 22.60 kB 23.25 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +1.73% 100.25 kB 101.98 kB +1.39% 18.68 kB 18.94 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +1.73% 100.30 kB 102.03 kB +1.40% 18.70 kB 18.96 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +1.36% 127.58 kB 129.32 kB +1.12% 23.36 kB 23.62 kB
oss-stable-semver/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +1.07% 138.54 kB 140.02 kB +1.20% 32.36 kB 32.75 kB
oss-stable/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +1.07% 138.56 kB 140.04 kB +1.20% 32.38 kB 32.77 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.99% 99.89 kB 100.88 kB +1.09% 18.71 kB 18.91 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.99% 99.94 kB 100.93 kB +1.09% 18.73 kB 18.94 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.97% 102.07 kB 103.06 kB +1.06% 19.10 kB 19.30 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.97% 102.12 kB 103.11 kB +1.08% 19.12 kB 19.33 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.96% 102.63 kB 103.62 kB +1.07% 19.24 kB 19.44 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.96% 102.68 kB 103.67 kB +1.07% 19.26 kB 19.47 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.90% 164.04 kB 165.52 kB +1.04% 37.42 kB 37.81 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-client.production.js +0.82% 1.94 kB 1.96 kB = 0.76 kB 0.76 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-client.production.js +0.82% 1.94 kB 1.96 kB = 0.76 kB 0.76 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-client.production.js +0.82% 1.94 kB 1.96 kB = 0.76 kB 0.76 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.78% 127.23 kB 128.21 kB +0.92% 23.39 kB 23.60 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.76% 129.41 kB 130.40 kB +0.90% 23.78 kB 23.99 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.76% 129.97 kB 130.96 kB +0.92% 23.92 kB 24.14 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-flight-server.production.js +0.40% 2.48 kB 2.49 kB +0.37% 0.82 kB 0.82 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-flight-server.production.js +0.40% 2.48 kB 2.49 kB +0.37% 0.82 kB 0.82 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-flight-server.production.js +0.40% 2.48 kB 2.49 kB +0.37% 0.82 kB 0.82 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +0.40% 101.57 kB 101.97 kB +0.54% 18.47 kB 18.57 kB
oss-stable/react-client/cjs/react-client-flight.development.js +0.40% 101.59 kB 102.00 kB +0.54% 18.50 kB 18.60 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.37% 107.08 kB 107.47 kB +0.38% 19.99 kB 20.06 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.37% 107.08 kB 107.47 kB +0.38% 19.99 kB 20.06 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.36% 104.55 kB 104.93 kB +0.36% 19.54 kB 19.61 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.36% 104.55 kB 104.93 kB +0.36% 19.54 kB 19.61 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.36% 110.00 kB 110.40 kB +0.37% 20.48 kB 20.55 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.36% 110.00 kB 110.40 kB +0.37% 20.48 kB 20.55 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.36% 105.84 kB 106.21 kB +0.37% 19.85 kB 19.92 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.36% 105.84 kB 106.21 kB +0.37% 19.85 kB 19.92 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.35% 112.36 kB 112.75 kB +0.37% 20.71 kB 20.79 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.35% 112.36 kB 112.75 kB +0.37% 20.71 kB 20.79 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.35% 108.93 kB 109.31 kB +0.36% 20.32 kB 20.40 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.35% 108.93 kB 109.31 kB +0.36% 20.32 kB 20.40 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.35% 109.02 kB 109.40 kB +0.36% 20.36 kB 20.43 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.35% 109.02 kB 109.40 kB +0.36% 20.36 kB 20.43 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.35% 113.69 kB 114.08 kB +0.36% 20.96 kB 21.04 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.35% 113.69 kB 114.08 kB +0.36% 20.96 kB 21.04 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +0.31% 128.87 kB 129.28 kB +0.41% 23.16 kB 23.25 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.29% 134.35 kB 134.75 kB +0.31% 24.59 kB 24.66 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.29% 137.28 kB 137.67 kB +0.31% 25.08 kB 25.16 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.29% 131.82 kB 132.20 kB +0.32% 24.11 kB 24.19 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.28% 133.11 kB 133.49 kB +0.32% 24.47 kB 24.54 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.28% 139.63 kB 140.03 kB +0.31% 25.32 kB 25.40 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.28% 140.96 kB 141.36 kB +0.31% 25.57 kB 25.65 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.28% 136.21 kB 136.59 kB +0.31% 24.96 kB 25.03 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.28% 136.30 kB 136.68 kB +0.31% 24.99 kB 25.07 kB
oss-experimental/react-markup/cjs/react-markup.react-server.development.js +0.27% 604.88 kB 606.52 kB +0.28% 107.78 kB 108.08 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js = 100.57 kB 100.36 kB = 20.54 kB 20.51 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js = 99.68 kB 99.47 kB = 20.33 kB 20.30 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js = 99.26 kB 99.06 kB = 20.24 kB 20.20 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js = 95.89 kB 95.68 kB = 19.66 kB 19.62 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js = 95.89 kB 95.68 kB = 19.66 kB 19.62 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js = 95.08 kB 94.88 kB = 19.49 kB 19.46 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js = 95.08 kB 94.88 kB = 19.49 kB 19.46 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js = 94.67 kB 94.46 kB = 19.39 kB 19.36 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js = 94.67 kB 94.46 kB = 19.39 kB 19.36 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js = 93.55 kB 93.35 kB = 19.31 kB 19.28 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js = 92.27 kB 92.06 kB = 19.05 kB 19.01 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js = 88.87 kB 88.67 kB = 18.53 kB 18.50 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js = 88.87 kB 88.67 kB = 18.53 kB 18.50 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js = 87.67 kB 87.47 kB = 18.28 kB 18.25 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js = 87.67 kB 87.47 kB = 18.28 kB 18.25 kB

Generated by 🚫 dangerJS against 598ff08

process.env.NODE_ENV === 'development' &&
typeof WebSocketStream === 'function'
) {
const requestId = crypto.randomUUID();
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is used to associate the WebSocket request with the fetch request.

In theory, this system can work with multiple development servers. E.g. it's resilient to the server restarting (loses the connection) which is nice.

However, if you have multiple servers that might respond to the socket request vs the fetch, you end up with different servers answering.

Another approach would be to also just make the RSC request through the WebSocket.

Comment on lines +4103 to +4104
// We earlier deferred this same object. We're now going to eagerly emit it so let's emit it
// at the same ID that we already used to refer to it.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we emit eagerly when we see it twice?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We only get here if we have passed the objectLimit check above. Either because something else with a high limit also wrote this object or because we're now asking for it from the client.

If there's still an object limit being enforced we wouldn't get here no matter how many times we see the same object.

Co-authored-by: Hendrik Liebau <mail@hendrik-liebau.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed React Core Team Opened by a member of the React Core Team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants