Meteor、Modulus 和安全的 websockets
Meteor, Modulus and secure websockets
试图在 Meteor -> Modulus 上下文中了解 websockets 和 xhr。我注意到有时响应时间很长,这显然是由于 websockets 在无法连接时回落到 xhr...我正在尝试诊断原因。
正式版应用托管在 Modulus 上。已启用 SSL。
我目前 done/checked 的事情
- 升级所有东西:该应用程序一直在 1.0.2.1(最新)运行,但最初是创建的
在 ~0.65 天内。作为第一项业务,我升级了
standard-app-packages 到 meteor-platform packages 并重新启动
服务器。没有变化。
- Modulus:检查...Modulus 不需要任何明确的命令来启用安全的 websockets
- Meteor:检查...自 Meteor 0.6.3.1 起默认启用 websockets。
- 出版物大小:我确定我可以更节俭一点
出版物,但这些似乎总共约 1.4kb。
- 浏览器安全策略:合理确定这没问题(见下文)
这里是相对新手,非常感谢您对接下来要检查的内容有任何想法或建议。
附注 - 类似的未回答问题 here and here
BrowserPolicy.content.disallowConnect();
//
//Allow Meteor DDP Connections
//
var rootUrl = __meteor_runtime_config__.ROOT_URL;
console.log('ROOT_URL: ' + rootUrl);
//Allow DDP connections for local development
if (rootUrl == 'http://localhost:3000/') {
BrowserPolicy.content.allowConnectOrigin(rootUrl);
BrowserPolicy.content.allowConnectOrigin(rootUrl.replace(/http(s?)/, 'ws'));
}
//Allow DDP connections for staging server currently using Meteor's free hosting
if (rootUrl == 'http://staging.example.com') {
BrowserPolicy.content.allowConnectOrigin('https://*.meteor.com');
BrowserPolicy.content.allowConnectOrigin('wss://*.meteor.com');
}
//Allow DDP connections for Modulus
if (rootUrl == 'https://myappname-12345.onmodulus.net') {
BrowserPolicy.content.allowConnectOrigin('https://example.com');
BrowserPolicy.content.allowConnectOrigin('wss://example.com');
}
更新:
为了安全起见,请将模数 ROOT_URL 更改为您的自定义域。所以 https://myappname-12345.onmodulus.net
变成 https://example.com
。
无论您做什么,您的用户中至少有一小部分可能会回退到 XHR。 WebSockets 仍然没有在所有地方得到完全支持,尤其是在移动设备上。使用 SSL 可以获得更广泛的支持,但仍然不是无处不在。
只要 WebSockets 看起来适合您,您就无能为力了。 XHR 在设计上会有很长的响应时间。 XHR 通过打开与服务器的长连接(~30 秒)来工作。如果服务器无话可说,它将关闭连接并重新执行。这允许服务器在 30 秒 window 的任何时间立即响应。这些 XHR 民意调查显示响应时间很长,但完全正常。
免责声明:我是 Modulus 员工
试图在 Meteor -> Modulus 上下文中了解 websockets 和 xhr。我注意到有时响应时间很长,这显然是由于 websockets 在无法连接时回落到 xhr...我正在尝试诊断原因。
正式版应用托管在 Modulus 上。已启用 SSL。
我目前 done/checked 的事情
- 升级所有东西:该应用程序一直在 1.0.2.1(最新)运行,但最初是创建的 在 ~0.65 天内。作为第一项业务,我升级了 standard-app-packages 到 meteor-platform packages 并重新启动 服务器。没有变化。
- Modulus:检查...Modulus 不需要任何明确的命令来启用安全的 websockets
- Meteor:检查...自 Meteor 0.6.3.1 起默认启用 websockets。
- 出版物大小:我确定我可以更节俭一点 出版物,但这些似乎总共约 1.4kb。
- 浏览器安全策略:合理确定这没问题(见下文)
这里是相对新手,非常感谢您对接下来要检查的内容有任何想法或建议。
附注 - 类似的未回答问题 here and here
BrowserPolicy.content.disallowConnect();
//
//Allow Meteor DDP Connections
//
var rootUrl = __meteor_runtime_config__.ROOT_URL;
console.log('ROOT_URL: ' + rootUrl);
//Allow DDP connections for local development
if (rootUrl == 'http://localhost:3000/') {
BrowserPolicy.content.allowConnectOrigin(rootUrl);
BrowserPolicy.content.allowConnectOrigin(rootUrl.replace(/http(s?)/, 'ws'));
}
//Allow DDP connections for staging server currently using Meteor's free hosting
if (rootUrl == 'http://staging.example.com') {
BrowserPolicy.content.allowConnectOrigin('https://*.meteor.com');
BrowserPolicy.content.allowConnectOrigin('wss://*.meteor.com');
}
//Allow DDP connections for Modulus
if (rootUrl == 'https://myappname-12345.onmodulus.net') {
BrowserPolicy.content.allowConnectOrigin('https://example.com');
BrowserPolicy.content.allowConnectOrigin('wss://example.com');
}
更新:
为了安全起见,请将模数 ROOT_URL 更改为您的自定义域。所以 https://myappname-12345.onmodulus.net
变成 https://example.com
。
无论您做什么,您的用户中至少有一小部分可能会回退到 XHR。 WebSockets 仍然没有在所有地方得到完全支持,尤其是在移动设备上。使用 SSL 可以获得更广泛的支持,但仍然不是无处不在。
只要 WebSockets 看起来适合您,您就无能为力了。 XHR 在设计上会有很长的响应时间。 XHR 通过打开与服务器的长连接(~30 秒)来工作。如果服务器无话可说,它将关闭连接并重新执行。这允许服务器在 30 秒 window 的任何时间立即响应。这些 XHR 民意调查显示响应时间很长,但完全正常。
免责声明:我是 Modulus 员工