flutter / flutter/devtools

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

未关闭
#2,892 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
cross-screen P2
主要语言
Dart
星标
1.7k
派生
404
平均合并
6 天 17 小时
30 天内合并 PR
18

描述

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](https://user-images.githubusercontent.com/1078012/114532476-c9115e80-9c44-11eb-9f18-3cd551bac898.png)

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.

贡献指南

打开贡献指南

调研方向

从 packages/devtools_app/lib/main.dart 中的 await init() 调用开始,然后跟踪 _framework_initialize_web.dart 中的 DevToolsServerConnection.connect 以及 server_api_client.dart 中的 SseClient 创建过程。确定应如何处理不具备响应式 SSE 的代理,并验证 DevTools 在该环境中不再卡在白屏上。

由索引模型根据 Issue 内容生成。

评估

技术栈
dart
领域
devtools
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
32/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。