2017-02-09 5 views
1

У меня есть несколько удаленных устройств, которые общаются с центральным приложением Meteor, работающим на капельке Digital Ocean Ubuntu 14.04 в контейнере Docker. Каждое устройство имеет свой собственный канал, и сервер подписывается на все каналы, а также канал «телеметрия», общий для всех устройств. Все работает отлично на некоторое время (от нескольких дней до нескольких недель), но затем обратный вызов подписки на сервере прекращает стрельбу всякий раз, когда отправляется сообщение (сообщения отображаются в консоли отладки PubNub). Однако сервер может публиковать сообщения. После перезагрузки сервер подписывается нормально. Вот соответствующий фрагмент кода:Pubnub subscribe перестает получать сообщения через некоторое время

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, и это работает, но это очень сложная задача воссоздать как это может занять много времени, чтобы всплывал, так что если любой может понять эту проблему, это будет оценено. Я расскажу еженедельно о том, как проходит тест.

Прямо сейчас мое временное исправление в производстве - это перезапустить сервер каждый день, что для меня не идеально.

Update 2/15/17

ли тест с бревнами отладки Pubnub поддержкой. Он снова не работал. Ниже приведены последние несколько строк журнала.

enter image description here

сердечных сокращений, кажется, идет в обычном режиме. Я перепроверял журналы, прежде чем перезапустить его, а другой был записан в 6:44 utc. Объект после биения в 6:39 - это сообщение, которое было успешно опубликовано на одном из моих устройств. Есть идеи?

Вы можете увидеть полный журнал here. Журналы из моего кода не отформатированы очень хорошо, поэтому извините беспорядок.

+0

Привет Сэм! Это звучит как ошибка SDK. Мы пересматриваем. – PubNub

+0

Наша команда просматривает детали, касающиеся вашей установки Digital Ocean с помощью Node.JS – PubNub

+0

Время ожидания '0' - большая проблема. Вы должны опустить эту настройку.По сути, тайм-аут '0' скажет PubNub, что клиент **' 100% оффлайн' ** и в постоянном состоянии «подключение к сети». – PubNub

ответ

0

Запуск NodeJS в Докер на Digital Ocean

с соединением 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

Смежные вопросы