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
[Feature Request] 代理配置里,能否提供一个是否进行压缩的配置项 #12144
Comments
表示有同样的需求 |
是的,欢迎 PR 提供一个 综合 issue 来看,有这个需求的场景仅限于开发时的 sse 传输不达预期,而生产构建后和 dev server 无关,所以只是很少数人的需求。 |
感谢回复。 |
Background
Hello,首先感谢umijs团队对开源界的付出和努力。
我最近在做一个类似chatgpt的网页聊天应用,需要使用HTTP的SSE特性实现文本流式输出的功能。但是在使用umijs提供的代理功能对服务端的sse接口进行代理之后,接口会被阻塞,直到所有的event的都处理结束,才一次性返回到页面端。
即,正常的情况下,sse请求应该是如下的情况:
实际在使用了代理后,sse变成了如下情况:
这样用户实际上还是要等到所有事件处理完后才能得到响应,失去了sse的意义。
我搜索了其他issue,也有其他人遇到了同样的问题:
#11958
#11453
但是好像没有人给出直接问题原因所在。
Proposal
根据我的研究,问题出在umi代码中,bundler-webpack/src/server/server.ts的48行:
server.ts
即:
app.use(require('@umijs/bundler-webpack/compiled/compression')());
这里为代理服务器的express实例引入了压缩中间件,并且没有提供配置来避免引入这个中间件。而强制压缩,会导致sse的事件不会如预期的流式输出,而是等到所有所有事件都到达,并且完成压缩后才传递到页面。
目前我有两个解决方案,
一个是自己自定义一个插件来修改express的app实例,如下
另一个方案是,手动删除这一行来保证我的sse请求正常执行。
但我觉得这个两个方法的侵入性都太强了,尤其第二个。所以希望umijs官方能否提供一个类似webpack里devServer的compress配置项,来把这个压缩的逻辑交给用户来决定。
The text was updated successfully, but these errors were encountered: