如何通过DDP(WebSocket)协议访问meteor.com上托管的应用程序?

时间:2013-09-17 18:52:02

标签: javascript web-services websocket meteor ddp

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

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

当我在浏览器中打开它时,我看到了应用A的主页使用了

这样的网址

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

问题:

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

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

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

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

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

1 个答案:

答案 0 :(得分:7)

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

  2. 我不太确定您正在编写应用程序B的语言,但是您需要使用DDP客户端连接到您的服务器,或者您可以编写一个,DDP规范是公平的{{ 3}}和open。 有几个DDP实现,有些可能需要更新到1之前版本规范:

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

  3. 如果你在端口443上连接它应该是wss。我不太确定websockets会重定向。这是服务器方面的事情,所以如果你使用meteor部署你还不能控制它(也许当它们释放galaxy时,这可能会改变)。也许xxxx包可能有帮助吗?但是,不太确定它是否也强制执行连接的websockets部分。

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

  5. 对于meteor部署托管,您无法更改DDP服务器以使用其他服务器或更改环境变量(请参阅https://github.com/sonyarouje/DDPClient.NET)。

  6. 请记住meteor部署托管是非常年轻的&制作流星的人仍然没有释放他们的星系解决方案,所以这可能会在将来发生变化。

    对于布局/间距抱歉,我无法掌握这个降价的事情。