微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Rails 中缩小响应并在 JS 中膨胀

如何解决在 Rails 中缩小响应并在 JS 中膨胀

我在 Ruby on Rails 中创建了一个 API。我没有将响应正文与 API 响应一起发送回,而是将其广播到外部服务,然后该服务负责向所有连接的客户端(即 WebSockets)进行实时分发。

今天我遇到了一个障碍,我意识到我们的 3rd 方提供商只允许最大 25kb 的数据包。随着数据增长超过此限制并且第 3 方服务已开始阻止呼叫,我们的回应之一开始出现问题。作为旁注,数据包很少会增长到大于 25kb。

我做了一些研究,正在考虑最好的主意是什么。我想到的一个想法是使用 ZLib 压缩响应,然后在 JS 端解压缩它。导致这种情况的文章this StackOverflow question

我设法使通缩和 Base64 编码正确,但无法在 JS 端解码。我还测试了生成的 Base 64 字符串,但 this one 等服务将 base64 字符串标记为无效。

我的代码如下:

在 Rails 控制器中

...
compressed_data = Zlib::Deflate.deflate(json_data.to_s)
encoded_data = Base64.encode64(compressed_data)
broadcast encoded_data
...

在接收广播的JS中:

import pako from 'pako';
import { decode } from 'js-base64';
...
const decoded = decode(payload.data);
const decompressed = pako.inflate(decoded);
...

当我执行广播时,我收到错误unkNown compression method。我知道这可能与 pako 有关,但我也尝试过其他方法但没有成功。有没有人有任何想法或者甚至更好的方法解决这个问题?

更新:

rails 中生成的 Base64 字符串如下所示:

eJxlU2Fr2zAQ/SuHP25JkJW2abMPY6OllJWkNGFftmEU+RKLypKRTknD6H/f\nyQ5ru0EQutPdy3vvzr8LUxfz8nJ2NSrIkMvixkj4GjyGCNc+tBjgZxJCXsAq\nbbfePsF3NNa4XTEqaow6mI6Md9xWSgGPqm0RPkC+r8gjeW9yLDn+5vktRDPA\nYWrtJ4uwPBUIka9wr/qiCTze3N6t1o9f1nfLBTzcLK7vFref4cGiiggBdyYS\nU9scQRHkJEE5axjEO6AGoVZH2ODWB+xdlxRmOYGl0wgHhEbtM4xGs8cajj6F\nE2hQuXA0pGokZWyEg7GW4SCiIyDfQwa0uFccw4aI5PUTqF1+PzR+aNDekdKU\noXKT9m1nkQZCeyRiE6ELXmNkvWzniWRlvVYnT+/9gVUuQ4euVjyc16JIKlBV\nK+onJmQ5FuVYynU5nQvBv4kQ4qOQfHvTxCinFpesfc3TscswK2NZANdvTF0z\nuwqfCV0cqDj/JuSSriL1XIUeTXCcjjy3qgvYmtT2qRq3KlkmiZ2PhvqcTiGg\n00cGXKgF4+iADFFXigYdYlzKsTxbl2I+vZpPy4mUs786Ule/K+5Flyya32Uu\nvijL1+KIocrbPcv0gnK66cOzy1ER2fMsPMeDFSy5Mo7ZtGxBtVc2YSzmP0q2\ncSTzMc3HeT5yTvwaFU2/q9kG/oLOR0XLQzeaV7Hq0saa2FTkn9D9a7bl4VKq\n/xuC9W73/kHFNs+5H7HnFcCaZTlFKeTMATf5z/rvMO/VYEtuffkDW0lDVA==\n

解决方法

您的数据以 zlib 标头开头,但由于某种原因压缩的数据已损坏。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?