我正在使用流在两个应用程序之间发送通知。应用程序通过Redis通过集群进行通信。每当我将某些通知从一个应用程序推送到另一个应用程序时,它都将不起作用。但是,当我刷新浏览器并尝试时,它可以工作。

你能告诉我是什么问题。我的代码如下:

应用程式1程式码

function sendMessage(message,date,toUserId,fromUserId,jobId){
  ChatStream.emit(toUserId,message,date,toUserId,fromUserId,jobId);
}

ChatStream.on(Meteor.userId(),function(message,date,toUserId,fromUserId,jobId){
  var formatDate = moment(date).fromNow();
  var index = ClientChat.find().count();
  var chatObj = {
    from:fromUserId,
    message:message,
    date:formatDate,
    jobId:jobId,
    index:index
  }
  //ClientChat.insert({from:fromUserId,message:message,date:formatDate,jobId:jobId,index:index})
  ClientChat.insert(chatObj);
  Session.set('receivedPing',chatObj);
})

应用2
function sendMessage(message,date,toUserId,fromUserId,jobId){
  ChatStream.emit(toUserId,message,date,toUserId,fromUserId,jobId);
}

ChatStream.on(Meteor.userId(),function(message,date,toUserId,fromUserId,jobId){
  ClientChat.insert({from:fromUserId,message:message,date:date,jobId:jobId})
})

服务器文件夹中的Cluster.js
Meteor.startup(function(){
  Meteor.Cluster.init();
  Meteor.Cluster.sync(ChatStream,LocalNotificationStream);
})

lib文件夹
ChatStream = new Meteor.Stream('chatStream');

我使用的软件包是arunoda流
http://arunoda.github.io/meteor-streams/

最佳答案

我找到了解决方案。这是因为代码

ChatStream.on(Meteor.userId(),function(message,date,toUserId,fromUserId,jobId){
  ClientChat.insert({from:fromUserId,message:message,date:date,jobId:jobId})
})

在应用程序刚刚启动且用户尚未登录时正在运行。因此,我确保仅在通过此操作登录后才运行此代码
Deps.autorun(function(){
  if(Meteor.userId()){
         ChatStream.on(Meteor.userId(),function(message,date,toUserId,fromUserId,jobId){
      ClientChat.insert({from:fromUserId,message:message,date:date,jobId:jobId})
    })
      }
    })
  }
});

10-07 13:12