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

时间:2014-05-04 20:25:10

标签: websocket meteor socket.io

有没有办法在两个Meteor服务器之间发送事件?我知道我可以使用DDP.connect将Server1连接到Server2(反之亦然),只需在两个服务器之间调用方法即可。这对我来说不起作用,因为我的一台服务器(Server1)将在我的家后面的动态IP和防火墙。 DDP.connect需要一个网址。在两台服务器之间进行通信的最佳方式是什么?我认为这样做的唯一方法就是Socket.io,其中Server1连接到Server2。我不确定这是否可以在Meteor中完成。感谢。

1 个答案:

答案 0 :(得分:2)

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

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

var Events = new Meteor.Collection("events");

Meteor.publish("events", function () {
  return Events.find({});
}

在服务器1上(在你家):

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
  }
});

然后,只要服务器2将对象添加到Events集合,您就可以通过连接在服务器1上获取它。但请注意 - 每次服务器1连接到服务器2时,它也将获得所有先前的事件。如果您不希望这种情况发生,您需要在订阅上使用就绪回调:

服务器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
    }
  });
});