我有一个Meteor应用程序A和另一个应用程序B,没有使用Meteor,但与应用程序A进行了一些数据交换。当我在本地网络中的计算机上启动A时,它工作正常,但是当我在托管它的meteor.com上部署它时,它不能正常工作。服务器未回复。
B使用代码new WebSocket("ws://" + host + ":3000/websocket")进行连接(DDP协议(protocol))。
但是,当我将ws更改为wss时,即使在LAN中的计算机上也无法正常工作-它不会响应。

我在浏览器中打开应用程序A的主页时使用的网址如下
wss://ddp--6774-{my host name}.meteor.com/sockjs/465/asf0b7da/websocket

问题:

  • 如何使B使用安全的WebSocket(wss)进行连接?
  • 如何将其连接到{my host name} .meteor.com上托管的A
  • 如何强制A使用固定URL(例如ws://{my host name}.meteor.com:3000/websocket)回复请求?我如何强制它使用ws而不是wss?
  • 我应该在config.js还是settings.js中指定一些内容?
  • 是否可以为meteor.com托管指定环境变量,例如DDP_DEFAULT_CONNECTION_URL,NODE_OPTIONS?
  • 最佳答案

  • websocket服务器由sockjs处理,因此,只要您使用标准的wss,它就应该“正常工作”(请参阅​​https://github.com/sockjs/sockjs-node)。如果您是在客户端上实现websocket的,则可以使用websockets。大气/陨石项目使用带有安全套接字的node-ddp客户端(有几个问题,但我认为它们已排序)。 (依次取决于faye-websockets library)
  • 我不太确定要用哪种语言编写应用程序B,但是您需要使用DDP客户端连接到服务器,或者可以编写一种,DDP规范相当是openreversible
    有一些DDP实现,可能需要更新一些到1版之前的规范:
  • Java(https://github.com/kutrumbo/java-ddp-client)
  • Ruby(https://github.com/tmeasday/ruby-ddp-client)
  • NodeJS(https://github.com/oortcloud/node-ddp-client)-最新
  • Objective-C(https://github.com/boundsj/ObjectiveDDP)
  • .NET(C#/ VB.NET)(https://github.com/sonyarouje/DDPClient.NET)

  • 另外,您可能会遇到麻烦,因为您发现与new WebSocket("ws://" + host + ".meteor.com/websocket")的连接无效,这是因为 meteor 部署托管使用ddp代理(可通过ddp--xxxx-{my host name}.meteor.com访问,但是xxxx在进行新部署时也总是会更改,因此您必须访问html文件并解析ddp服务器是什么,或在每次部署应用程序时对其进行记录。
  • 如果您在端口443上连接,则应该为wss。我不太确定websocket是否会重定向。这是服务器端的事情,因此,如果您正在使用 meteor 部署,您将无法对此进行控制(也许当他们释放星系时,它可能会改变)。也许force-ssl包可能会有所帮助?不过,不太确定它是否也强制执行连接的websockets部分。
  • 对于DDP,您无法在设置
  • 中指定任何已知设置
  • 对于 meteor 部署托管,您不能将DDP服务器更改为使用另一台服务器或更改环境变量(请参阅https://github.com/oortcloud/unofficial-meteor-faq)。

  • 请记住, meteor 部署托管服务还很年轻,而制造 meteor 的家伙还没有发布他们的银河解决方案,因此将来这一切都可能会改变。

    顺便说一句,对布局/间距感到抱歉,我无法理解这个 Markdown 的窍门。

    07-28 10:09