2017-02-09 90 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

相關問題