flutter / devtools

Performance tools for Flutter
https://flutter.dev/docs/development/tools/devtools/
BSD 3-Clause "New" or "Revised" License
1.57k stars 323 forks source link

DevTools fails to load through proxies that don't support SSE #2892

Open DanTup opened 3 years ago

DanTup commented 3 years ago

I tried to launch DevTools in a cloud editor that doesn't support SSE (its connections will just hang indefinitely) and it failed to load (just leaving a white screen after printing the version number to the console).

The network tab looks like this:

Screenshot 2021-04-13 at 10 36 45

I can't easily confirm, but I think it will be hanging on this await here:

https://github.com/flutter/devtools/blob/43b2f5ea102fede6aa4776510858775acc31c6df/packages/devtools_app/lib/main.dart#L28

That init() call tries to use storage which will be a ServerConnectionStorage because DevToolsServerConnection.connect does not return null here:

https://github.com/flutter/devtools/blob/f38f4acde909be516b3de172405d48b6b484ea70/packages/devtools_app/lib/src/config_specific/framework_initialize/_framework_initialize_web.dart#L18-L23

It doesn't return null, because in connect() the call to api/ping works fine (it's not SSE), which then unconditionally creates an SseClient:

https://github.com/flutter/devtools/blob/86102bdec15a0a5fb3fb70ab98e8ff4e5e50141c/packages/devtools_app/lib/src/server_api_client.dart#L28

If we want to support this, I think there are two options:

  1. Support WebSockets instead of SSE for this API (DWDS already has some abstractions over SSE+WebSockets that could probably be taken)
  2. Change this code to detect that SSE is not responsive and return null (this would effectively disable the server though, which may affect some functionality)

@devoncarew @jacob314 I don't know if this is currently worth pursuing, but thought it was worth capturing the issue somewhere perhaps to come back to.

jacob314 commented 3 years ago

Fyi @grouma

DanTup commented 2 weeks ago

Another issue I believe is caused by SSE is not being able to open > 5 DevTools tabs, see https://github.com/flutter/devtools/issues/8298. If the fix for that issue is to switch from SSE to WS, that may also resolve this.