9

我有一个Meteor应用程序A和另一个应用程序B,不使用 Meteor,而是与应用程序进行一些数据交换A。当我在本地网络中的机器上启动它时它工作正常A,但是当我将它部署在托管它的流星.com 上时它没有。服务器没有回复。

B使用代码new WebSocket("ws://" + host + ":3000/websocket")进行连接(DDP 协议)。但是,当我将 ws 更改为 wss 时,即使使用 LAN 中的机器,它也不再工作 - 它没有回复。

当我在浏览器中打开应用程序时,我看到该应用程序的主页A使用如下 URL

wss://ddp--6774-{my host name}.meteor.com/sockjs/465/asf0b7da/websocket.

问题:

  1. 如何B使用安全 WebSocket (wss) 进行连接?

  2. 如何将其连接到A托管在 {my host name}.meteor.com 上?

  3. 如何强制A回复使用固定 URL 的请求,例如,ws://{my host name}.meteor.com:3000/websocket?如何强制它使用 ws 而不是 wss?

  4. 我应该在 config.js 或 settings.js 中指定一些内容吗?

  5. 有没有办法为meteor.com主机指定环境变量,例如DDP_DEFAULT_CONNECTION_URL、NODE_OPTIONS?

4

1 回答 1

7
  1. websocket 服务器由 sockjs 处理,因此只要您使用标准 wss,它就应该“正常工作”(请参阅​​ https://github.com/sockjs/sockjs-node)。如果您的客户端上的 websocket 实现是使用 websockets 构建的,那应该没问题。大气/陨石项目使用带有安全套接字的 node-ddp 客户端(有几个问题,但我认为它们已排序)。(这又取决于faye-websockets 库

  2. 我不太确定您使用哪种语言编写应用程序 B,但您需要使用 DDP 客户端连接到您的服务器,或者您可以编写一个,DDP 规范是相当开放可逆的。有几个 DDP 实现,其中一些可能需要更新到 pre-1 版本规范:

    此外,您可能会遇到麻烦,因为您发现连接new WebSocket("ws://" + host + ".meteor.com/websocket")没有结果,这是因为流星部署托管使用 ddp 代理(通过 访问ddp--xxxx-{my host name}.meteor.com,但是xxxx当您进行新部署时也总是更改,您必须访问 html文件并解析出 ddp 服务器是什么,或者在每次部署应用程序时记下它。

  3. 如果您在端口 443 上连接,它应该是 wss。我不太确定 websockets 是否会重定向。这是服务器端的事情,所以如果你使用meteor deploy,你将无法控制它(也许当他们发布galaxy时这可能会改变)。也许force-ssl包裹可能会有所帮助?不过,不太确定它是否也强制执行连接的 websockets 部分。

  4. 对于 DDP,您无法在设置中指定任何已知设置

  5. 对于流星部署托管,您无法更改 DDP 服务器以使用另一台服务器或更改环境变量(请参阅https://github.com/oortcloud/unofficial-meteor-faq)。

请记住,meteor deploy 托管还很年轻,制作meteor 的人还没有发布他们的galaxy 解决方案,所以这可能会在未来发生变化。

顺便说一句,对于布局/间距感到抱歉,我无法掌握这个降价的东西。

于 2013-09-17T22:33:20.253 回答