我有一些远程设备与在Docker容器中的Digital Ocean Ubuntu 14.04 Droplet上运行的中央Meteor应用程序通信。每个设备都有自己的频道,服务器订阅了所有频道以及"遥测"所有设备共有的通道。一切都工作正常(几天到几周),但是只要发送了一条消息(消息显示在PubNub调试控制台中),服务器上的订阅回调就会停止。服务器可以正常发布。重新启动服务器后,订阅正常工作。这是相关的代码段:
pubnub = new PubNub({
publishKey: "pub-key",
subscribeKey: "sub-key"
});
pubnub.addListener({
message: function (m) {
console.log(m.channel);
console.log(m.message);
console.log(m.timetoken);
console.log(m.subscription);
if (m.channel == "telemetry") {
handleTelemetry(m);
} else {
handleRequest(m);
}
},
error: function (error) {
// Handle error here
console.log(JSON.stringify(error));
}
});
pubnub.subscribe({
channels: chans //chans is a list of channels
});
是否存在某种停止订阅服务的默认超时?如果是这样,我怎么能禁用它?
通过参考我发现这个值可以传递给初始化,但我不确定它是否与我相关。
我现在正在我的开发服务器中运行测试,并将presenceTimeout设置为0并且它正常工作,但这是一个非常难以重新创建的问题,因为它可能需要很长时间才能弹出所以如果有人对这个问题有任何见解,那么我们将不胜感激。我每周都会更新测试的进展情况。
现在我的生产中的临时修复是让cron每天重启服务器,这对我来说并不是很理想。
更新2/15/17
是否启用了Pubnub调试日志的测试。它再次停止工作。以下是日志的最后几行。
心跳似乎正常进入。我在重新启动之前重新检查了日志,并在6:44 utc记录了另一个。 6:39心跳后的对象是成功发布到我的某个设备的消息。有任何想法吗?
您可以看到完整的日志here。我的代码中的日志格式不是很好,所以请原谅。
答案 0 :(得分:0)
使用PubNub套接字连接接收数据通道的更新,您可以设置一个连续运行的node.js应用程序。当您为文件命名app.js
时,可以从命令行运行以下示例。
npm install pubnub
node app.js
// app.js
const PubNub = require('pubnub');
const pubnub = new PubNub({ publishKey : 'demo', subscribeKey : 'demo' });
pubnub.addListener({
message : m => console.log(m)
, error : m => console.log(m)
, presence : m => console.log(m)
});
pubnub.subscribe({ channels : ['a'] });