2016-12-05 5 views
0

Как сохранить переменную в Google Cloud Platform? Сейчас я использую глобальную переменную, которую разделяют мои маршруты, но значения отключены каждый раз, когда запрос был отправлен на маршрут. Я думаю, это связано с тем, что у моего сервера может быть несколько экземпляров, которые используют одну и ту же переменную. Мое приложение использует Node.js/Express.Как хранить переменные в облачной платформе Google

Мой POST маршрут устанавливает new_posted_time переменную, которая использует /display-message:

var new_posted_time = 0; 
app.post('/message', function (request, response) { 
    message = request.body.Body; 

    new_posted_time = new_posted_time + 1; 

    console.log("This is the new time from POST: " + new_posted_time); 
    response.send("<Response><Message>Heyyo!</Message></Response>"); 

}); 

Мой GET маршрут получает значение для new_posted_time, который был определен в /message.

app.get('/display-message', function(req,res){ 

    var last_updated_time = req.query.last_updated; 

    function checkMessage() { 
     var new_time = new_posted_time; 
     console.log("Checking messaged with new time from GET: " + new_time); 

     if(!last_updated_time || last_updated_time < new_time) { 
      updateMessage(new_time); 
     } 
     else { 
      console.log("No new messages at this time"); 
      myTimeout = setTimeout(function(){ 
       checkMessage(res); 
      }, 1000 * 10); //10 seconds 
     } 
    } 

    function updateMessage() { 
     console.log("Updating message now"); 
     var output = { 
      success: 1, 
      data: message, 
      old_stamp: last_updated_time, 
      new_stamp: new_stamp 
     }; 

     return res.json(output); 
    } 

    checkMessage(); 

}); 

Так что мне нужно, чтобы иметь возможность хранить общую переменную new_posted_time где-то в базе данных Google, потому что значение не соответствует каждый раз, когда запускается мое приложение из-за многие запущенные экземпляры (это мое предположение).

ответ

0

Вероятно, вы должны хранить «состояние», как это, в постоянном магазине, таком как Google Cloud Datastore. Вот статья на implementing counters с Google Cloud Datastore (ее из API AppAngine Datastore API, но это тот же принцип).

Сохранение состояния в ваших примерах - плохая идея, так как у вас будут проблемы с непротиворечивостью между экземплярами, вы также потеряете данные, когда экземпляр автоматически отключится AppEngine.

+0

Если я храню переменные как объекты в хранилище данных, это то же самое, что хранить состояние в моих экземплярах? Если да, то каков наиболее эффективный/подходящий метод для хранения общих переменных? –

+0

Использование хранилища данных не совпадает с «сохранением состояния в ваших экземплярах». Разница заключается в том, что при использовании хранилища данных вы записываете данные на диск с помощью службы, которая всегда будет доступна при записи в общую переменную, которую вы храните в памяти, на экземпляре машины, который может быть отключен произвольно автоскалером. –

+0

спасибо! Я немного запутался в том, как реализовать хранилище google в моем коде. Я вижу несколько способов сделать это в Node.js, но не могу заставить его работать. –

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