我使用EventSource从后端获取数据,因为有的数据量达到20M,所有想使用压缩,减少流量。
我试过压缩返回的消息,只对实际消息部分压缩,前端用pako解压缩。
但是前端接收数据好像默认按照字符串解析了,导致我拿到的是乱码,做解压缩会失败。
如果我对整条消息做压缩,并设置content-encoding: gzip,那么我可以成功接收到一条数据,之后浏览器主动把连接关闭了,导致后续数据传递失败。
我可以通过限制返回的数据条数来减少流量,这是一种解决办法,但是我还是希望在不减少返回的数据量的情况下,减少流量消耗。
serversent 推送仅支持纯文本,gzip不是纯文本压缩方式,肯定不支持。
可以考虑自己实现一套压缩方式,例如原始数据都是 ASCII 128以内的编码的字符, 而serversent支持推送Unicode编码所有字符,可以把多个进行合并到一个字符中。
不过最好还是别用serversent传输大文本, 考虑发送给客户端一个标记,客户端通过另外的http请求进行下载。