使用EventSource时,如何传递压缩文本

发布于 2022-09-13 01:10:13 字数 412 浏览 25 评论 0

我使用EventSource从后端获取数据,因为有的数据量达到20M,所有想使用压缩,减少流量。

我试过压缩返回的消息,只对实际消息部分压缩,前端用pako解压缩。
image.png
但是前端接收数据好像默认按照字符串解析了,导致我拿到的是乱码,做解压缩会失败。

如果我对整条消息做压缩,并设置content-encoding: gzip,那么我可以成功接收到一条数据,之后浏览器主动把连接关闭了,导致后续数据传递失败。
image.png

我可以通过限制返回的数据条数来减少流量,这是一种解决办法,但是我还是希望在不减少返回的数据量的情况下,减少流量消耗。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爺獨霸怡葒院 2022-09-20 01:10:13

serversent 推送仅支持纯文本,gzip不是纯文本压缩方式,肯定不支持。

可以考虑自己实现一套压缩方式,例如原始数据都是 ASCII 128以内的编码的字符, 而serversent支持推送Unicode编码所有字符,可以把多个进行合并到一个字符中。

不过最好还是别用serversent传输大文本, 考虑发送给客户端一个标记,客户端通过另外的http请求进行下载。

ι不睡觉的鱼゛ 2022-09-20 01:10:13

在设置content-encoding: gzip情况下,好像并没有办法解决只读取一次的问题。查看资料了解到,发送压缩数据到时候,因为压缩数据是有开始和结束标记的,读取到第一条数据的结束标记时,浏览器可能认为我的请求已经发送完了,就自动把请求断开了。

想到一个折中办法,就是在数据被压缩后,再转为base4,目前来看原数据字节数在1024以上时,经过压缩再转base64处理可以起到减小作用。所以现在是,数据大小低于1024字节不做处理,大于1024的做gzip压缩和base64。前端拿到数据后判断需不需要解码。效果还是很明显的,其中部分数据长度有350016字节,能被减小到78316字节。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文