【问题标题】:Are meteor's DDP msgs compressed?流星的 DDP 消息被压缩了吗?
【发布时间】:2014-06-27 07:11:44
【问题描述】:

如果没有,是否还有其他替代方案可以节省带宽?如果是,是否在更深层(例如 3rd 方 nodejs 模块)上完成?

【问题讨论】:

  • DDP 消息通过 SockJS 发送,目前不使用压缩。有关如何减少发送大量数据的加载时间的建议,请参阅stackoverflow.com/a/21835534/586086
  • 如果 sockjs 使用 gzip 的 xhr 长轮询,那么它们会被压缩:)

标签: javascript node.js meteor


【解决方案1】:

要了解 DDP,请查看 Arunoda Susiripala 最近发布的精彩内容

https://coderwall.com/p/rybkjghttp://meteorhacks.com/introduction-to-ddp.html

这些会让你更好地理解。

【讨论】:

  • 您当前的答案并没有真正解决 DDP 消息是否通过网络压缩的问题。 Andrew Mao 和 imslavko 的 cmets 回答了这个问题。因此,如果 msgs 使用 websockets,那么它们不会被压缩。如果使用轮询,则可以使用 gzip 进行压缩。
【解决方案2】:

是的,这是受支持的,您只需将环境变量 SERVER_WEBSOCKET_COMPRESSION 设置为他们正在使用的包所需的配置 permessage-deflate。但是您需要在那里设置一个可解析的 JSON。

这个包的所有选项都在这里faye/permessage-deflate-node

所以例如你可以有 var

SERVER_WEBSOCKET_COMPRESSION={"level":7, "maxWindowBits":13, "memLevel":7, "requestMaxWindowBits":13}

这是由 websocket 扩展完成的,它实际上对 SERVER_WEBSOCKET_COMPRESSION 执行以下操作:

var websocketExtensions = _.once(function () {
var extensions = [];

var websocketCompressionConfig = process.env.SERVER_WEBSOCKET_COMPRESSION
    ? JSON.parse(process.env.SERVER_WEBSOCKET_COMPRESSION) : {};
if (websocketCompressionConfig) {
extensions.push(Npm.require('permessage-deflate').configure(
  websocketCompressionConfig
));
}

return extensions;
});

因此,如果您的 JSON 无法通过,您的服务器将出现异常而爆炸。

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多