2017-02-09 142 views
1

我有一些远程设备与在Docker容器中的数字海洋Ubuntu 14.04液滴上运行的中央Meteor应用程序进行通信。每个设备都有自己的通道,服务器订购了所有通道,以及所有设备通用的“遥测”通道。一切都可以正常工作(几天到几周),但是当发送消息(消息显示在PubNub调试控制台中)时,服务器上的订阅回调将停止触发。服务器可以正常发布。我重新启动服务器后,订阅再次正常工作。以下是相关的代码片段: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 
}); 

是否有某种停止订阅服务的默认超时?如果是这样,我该如何禁用它?

通过参考看,我发现这个值,我可以传递给初始化,但我不知道它是否与我有关。

ref

我运行一个测试,现在在我的开发服务器presenceTimeout设置为0,它的工作,但它的重建,因为它可能需要很长的时间来弹出,所以如果一个非常困难的问题任何人有任何洞察到这个问题,将不胜感激。我会每周更新一次测试结果。

现在我在生产中的临时修复是让cron每天重新启动服务器,这对我来说并不是很理想。

更新17年2月15日

难道启用了Pubnub的调试日志测试。它再次停止工作。以下是日志的最后几行。

enter image description here

的心跳似乎在正常地到来。我重新检查日志,然后重新启动它,另一个日志记录在6:44 utc。 6点39分之后心跳后的对象是成功发布到我的设备之一的消息。有任何想法吗?

您可以看到完整的日志here。我的代码中的日志格式不是很好,所以请原谅。

+0

萨姆嗨!这听起来像一个SDK错误。我们正在审查。 – PubNub

+0

我们的团队正在通过Node.JS – PubNub

+0

查看有关您的Digital Ocean设置的详细信息存在超时'0'是一个大问题。您应该省略此设置。本质上,一个'0'超时会告诉PubNub客户端是** 100%离线**并处于“连接到网络”的恒定状态。 – PubNub

回答

0

在泊坞运行上的NodeJS数字海洋

随着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'] }); 

Docker NodeJS on Digital Ocean

相关问题