Websocket 在两个Meteor服务器之间发送事件

Websocket 在两个Meteor服务器之间发送事件,websocket,meteor,socket.io,Websocket,Meteor,Socket.io,有没有办法在两台Meteor服务器之间发送事件?我知道我可以使用DDP.connect将Server1连接到Server2(反之亦然),并在两台服务器之间调用方法。这对我来说不起作用,因为我的一台服务器(Server1)将位于我家的动态IP和防火墙后面。DDP.connect需要一个url。在两台服务器之间进行通信的最佳方式(如果有的话)是什么?我认为实现这一点的唯一方法是类似Socket.io的东西,其中Server1连接到Server2。我不确定这是否可以在Meteor中实现。谢谢。您可以在

有没有办法在两台Meteor服务器之间发送事件?我知道我可以使用DDP.connect将Server1连接到Server2(反之亦然),并在两台服务器之间调用方法。这对我来说不起作用,因为我的一台服务器(Server1)将位于我家的动态IP和防火墙后面。DDP.connect需要一个url。在两台服务器之间进行通信的最佳方式(如果有的话)是什么?我认为实现这一点的唯一方法是类似Socket.io的东西,其中Server1连接到Server2。我不确定这是否可以在Meteor中实现。谢谢。

您可以在启动时使用DDP.connect将服务器1连接到服务器2,然后订阅服务器2发布的集合,例如:

在服务器2上(已知URL):

在服务器1上(在您家中):

var EventConnection=DDP.connect(“”);
var Events=new Meteor.Collection(“Events”,{connection:EventConnection});
EventConnection.subscribe(“事件”);
事件。查找({})。观察({
新增:函数(newEvent){
//对newEvent做些什么
}
});
然后,每当服务器2向事件集合添加对象时,您都会通过连接在服务器1上获取该对象。不过要小心——每次服务器1连接到服务器2时,它都会获得所有以前的事件。如果不希望发生这种情况,则需要在订阅时使用ready回调:

服务器1的修订代码:

var EventConnection = DDP.connect("<server 2 URL>");
var Events = new Meteor.Collection("events", {connection: EventConnection});

EventConnection.subscribe("events", function () {
  Events.find({}).observe({
    added: function (newEvent) {
      // do something with newEvent
    }
  });
});
var EventConnection=DDP.connect(“”);
var Events=new Meteor.Collection(“Events”,{connection:EventConnection});
订阅(“事件”,函数(){
事件。查找({})。观察({
新增:函数(newEvent){
//对newEvent做些什么
}
});
});

这是有道理的。谢谢你的帮助。我仍然讨厌必须与数据库交互才能发送事件,但这可能会在将来发生变化。如果您查看
publish
的文档,您将看到第二个代码示例演示了如何在没有数据库的情况下使用
publish
。不过,这有点复杂,所以使用数据库会更容易。我有一个类似的例子,但server2(已知url)是您订阅server1(动态ip)的地方。因此,连接应该以相反的方式进行。这有可能吗?有趣的是,我想目前还不支持。您首先需要获得另一台服务器的IP,并按正确的方向连接。您可以在打开DDP连接之前先发送请求来完成此操作。
var EventConnection = DDP.connect("<server 2 URL>");
var Events = new Meteor.Collection("events", {connection: EventConnection});

EventConnection.subscribe("events");

Events.find({}).observe({
  added: function (newEvent) {
    // do something with newEvent
  }
});
var EventConnection = DDP.connect("<server 2 URL>");
var Events = new Meteor.Collection("events", {connection: EventConnection});

EventConnection.subscribe("events", function () {
  Events.find({}).observe({
    added: function (newEvent) {
      // do something with newEvent
    }
  });
});