CocaColaBear Posted June 29, 2014 Posted June 29, 2014 Всем привет! Есть такой вопрос. Если при рестарте ресурса, в onResourceStop вызвать dbExec раз эдак за 100 (записать положения игроков), успеют ли выполнится запросы, если при остановке ресурса подключение будет уничтожено?
Kernell Posted June 29, 2014 Posted June 29, 2014 Всё выполняется в одном потоке. Если подключение разрывается раньше чем обновляются игроки, то логично, что вместо сохранения информации в БД ты получишь кучу ошибок.
CocaColaBear Posted June 30, 2014 Author Posted June 30, 2014 Всё выполняется в одном потоке. Если подключение разрывается раньше чем обновляются игроки, то логично, что вместо сохранения информации в БД ты получишь кучу ошибок. Это понятно. Но судя по работе dbExec, данная функция лишь отправляет запрос на БД. После чего, данный запрос либо выполняется, либо ждет своей очереди на выполнение. Т.е. получается, огромное кол-во запросов помешается в стек и в подключении уже нет надобности, поэтому уничтожается. Пример, про что я спрашиваю: addEventHandler("onResourceStop", resourceRoot, function() for _, player in ipairs(getElementsByType("player")) do --dbExec(conneciton, ...) end destroyElement(conneciton) end ) Так как протестировать на огромном кол-ве игроков нет возможности, то спрашиваю, будет ли сбой? В теории, уничтожается лишь соединение, а запросы уже висят в стеке на обработку самой БД.
Elengar Posted July 1, 2014 Posted July 1, 2014 Всё выполняется в одном потоке. Если подключение разрывается раньше чем обновляются игроки, то логично, что вместо сохранения информации в БД ты получишь кучу ошибок. Это понятно. Но судя по работе dbExec, данная функция лишь отправляет запрос на БД. После чего, данный запрос либо выполняется, либо ждет своей очереди на выполнение. Т.е. получается, огромное кол-во запросов помешается в стек и в подключении уже нет надобности, поэтому уничтожается. Пример, про что я спрашиваю: addEventHandler("onResourceStop", resourceRoot, function() for _, player in ipairs(getElementsByType("player")) do --dbExec(conneciton, ...) end destroyElement(conneciton) end ) Так как протестировать на огромном кол-ве игроков нет возможности, то спрашиваю, будет ли сбой? В теории, уничтожается лишь соединение, а запросы уже висят в стеке на обработку самой БД. А зачем тебе игроки ? Сделай цикл на 10000(ну или сколько там может быть) и записывай в БД что-нибудь рандомное.
GTA-Multiplayer.com Posted July 6, 2014 Posted July 6, 2014 Действительно, сделай самостоятельно исследование этого вопроса. И о результатах напиши. Это же намного интересней
CocaColaBear Posted July 6, 2014 Author Posted July 6, 2014 Действительно, сделай самостоятельно исследование этого вопроса. И о результатах напиши. Это же намного интересней Уже проверил. Все нормально обновляется. Все так, как я говорил, запросы отправляются в стек БД и оттуда выполняются, поэтому соединение можно легко прерывать и код выше будет работать.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now