Я использую meteor.js.Я хочу вызвать поток, который не зависит от потока, который его вызвал.Другими словами, порожденный поток остается без присмотра и не возвращает значение потоку, который его породил.Созданный поток обновит базу данных, а meteor позаботится об оперативном обновлении клиента.
Я сталкивался с сервисными работниками или микросервисом Meteor по следующим ссылкам: здесь и здесь
Как изменить приведенный ниже код на , определить и , позвонить работнику службы или микросервису.Я хочу изменить метод updateCompanyAmount в моем коде на сервисный работник / микросервис.Если есть другой способ определить и вызвать независимые / необслуживаемые потоки, пожалуйста, дайте мне знать.Причина, по которой мне нужны независимые / необслуживаемые потоки, заключается в том, что я хочу, чтобы мое приложение масштабировалось вертикально.Представьте себе ситуацию, когда более миллиона пользователей одновременно звонят по номеру updateCompanyAmount (который обновляет документ и значение коллекции общей базы данных) !!Соединения некоторых пользователей могут прерваться в ожидании снятия блокировки, чтобы они могли обновить общее значение.
Вот мой код.Пожалуйста, прочитайте четыре комментария в коде, чтобы быстро понять код.Пожалуйста, дайте мне решение в javascript.
if (Meteor.isServer) {
Meteor.methods({
//I want to "save purchase history" and then return to client while a new thread or service-worker "updates company amount"
savePurchaseHistory: function(recharge,var1,var2,var3,var4,var5)
{
var userId = Meteor.userId();
.
.
.
PurchaseHistory.insert(recharge);
Meteor.call("updateCompanyAmount",companyAmount);
},
//I want to change this function to a service-worker or Meteor microservise
updateCompanyAmount: function(companyAmount,balance) {
//updateCompanyAmountRecursively method does the database update
Meteor.call("updateCompanyAmountRecursively",companyAmount);
},
//CompanySharedNumbers collection can be updated by multiple users. In this example companyAmount in CompanySharedNumbers is being updated
//by multiple users using a lock!
updateCompanyAmountRecursively: function(companyAmount) {
var userId = Meteor.userId();
var user = Meteor.users.findOne({_id: userId});
var random = Math.random();
var companySharedNumbers = CompanySharedNumbers.findOne({_id: 'onlyOccurrence'});
var locked = companySharedNumbers.updateLock;
if (!locked)
{
CompanySharedNumbers.update({_id: 'onlyOccurrence',updateLock:locked},{$set:{updateRandomNumber:random,
updateLock:!locked,updatedBy:user.username}});
Meteor.users.update({_id: userId},{$set:{updateRandomNumber: random}});
}
user = Meteor.users.findOne({_id: userId});
var userRandomNumber = user.updateRandomNumber;
companySharedNumbers = CompanySharedNumbers.findOne({_id: 'onlyOccurrence'});
var randomNumber = companySharedNumbers.updateRandomNumber;
var updatedBy = companySharedNumbers.updatedBy;
locked = companySharedNumbers.updateLock;
if (locked)
{
if (randomNumber == userRandomNumber && updatedBy == user.username)
{
if (companySharedNumbers.companyAmount)
{
companyAmount = companyAmount + companySharedNumbers.companyAmount;
}
random = 2;
CompanySharedNumbers.update({_id: 'onlyOccurrence',updateRandomNumber:userRandomNumber,updateLock:locked,updatedBy:user.username},{$set:
{updateRandomNumber:random,updateLock:!locked,companyAmount:companyAmount,updatedBy:user.username}});
}
else
{
Meteor.call("updateCompanyAmountRecursively",companyAmount);
return false;
}
}
else
{
Meteor.call("updateCompanyAmountRecursively",companyAmount);
return false;
}
}
});
}