2014-10-17 3 views
1

Я имею дело с проблемой, когда пользователь может обновить документ в течение указанного срока, а если нет, то сервер будет.Работа с параллельными запросами в Meteor

Обновление включает в себя увеличение значения и добавление объекта в массив документа. Мне нужно убедиться, что только один из пользователей/серверов обновляет документ. Не оба.

Для обеспечения этого выполните некоторые проверки, чтобы проверить, был ли документ уже обновлен, но есть моменты, когда пользователь и сервер работают в одно и то же время, и оба передают проверки, а затем документ обновляется дважды ,

Я пробовал много разных способов исправить это, но я не смог. Я попытался реализовать блокировку, подобную этой: http://en.wikipedia.org/wiki/Peterson%27s_algorithm, чтобы убедиться, что произойдет только одно обновление, а второе обновление не удастся, но я не был успешным. Есть идеи?

+0

не могли бы вы предоставить свой текущий код, чтобы мы могли на нем основываться? –

+0

Возможно, вы захотите взглянуть на пакет collection2, который поддерживает перехваты, как before.update. Но это поможет понять, как вы делаете это сейчас, поэтому ответы могут быть более подходящими для вашего дела. – mark

ответ

1

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

Вы можете достичь этого, используя запрос обновления MongoDB, который одновременно проверяет, обновлено ли значение и обновляет его. Как это:

var post = Posts.findOne("ID"); 
// ... do some stuff with the post ... 
Posts.update({counter: post.counter}, {$push: {items: newItem}, $inc: {counter: 1}}); 

Как вы можете видеть, в одном запросе мы оба проверить счетчик и увеличить его - так что, если два из этих запросов запустить один за другим только один будет на самом деле обновить документ (с встречным воны 't match больше).

+0

Ничего себе. Так просто. Это, вероятно, сделает это –

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