Я делаю многопользовательскую игру, используя node.js, socket.io и MongoDB.Как отложить чтение до написания?
Когда игрок умирает, они могут перезагрузить браузер непосредственно перед смертельным ударом и все еще быть в живых, даже несмотря на то, что убийство было зарегистрировано. Я использую следующее решение для сохранения/загрузки игрока:
socket.sockets.on('connection', onSocketConnection);
function onSocketConnection(client) {
util.log('New player has connected: '+client.id);
client.on('new player', function() {
db.collection('players').findOne({uuid: uid}, function(err, data) {
var player = new Player(data);
players.push(player);
});
});
client.on('disconnect', function() {
db.collection('players').update({uuid: player.uuid}, {$set: player}, {w: 1}, function(err, result) {
console.log('player written');
});
});
};
То, что я думаю, что происходит в том, что «разрыв» событие начинает писать, но прежде, чем это делается в «новый игрок» пожары событий, загружает плеер из базы данных и снова инициализирует его. Таким образом, чтение происходит до того, как запись будет выполнена (это означает, что они будут получать состояние игрока от разъединения до того, как это происходит прямо сейчас).
В этом проблема? Если нет, есть ли что-нибудь еще в моем подходе, которое может вызвать это? Если это действительно проблема, как я могу это решить?
вы можете найти и убить их из обратного вызова обновления соединения? – dandavis