CocaColaBear Posted June 29, 2014 Share Posted June 29, 2014 Всем привет! Есть такой вопрос. Если при рестарте ресурса, в onResourceStop вызвать dbExec раз эдак за 100 (записать положения игроков), успеют ли выполнится запросы, если при остановке ресурса подключение будет уничтожено? Link to comment
Kernell Posted June 29, 2014 Share Posted June 29, 2014 Всё выполняется в одном потоке. Если подключение разрывается раньше чем обновляются игроки, то логично, что вместо сохранения информации в БД ты получишь кучу ошибок. Link to comment
CocaColaBear Posted June 30, 2014 Author Share Posted June 30, 2014 Всё выполняется в одном потоке. Если подключение разрывается раньше чем обновляются игроки, то логично, что вместо сохранения информации в БД ты получишь кучу ошибок. Это понятно. Но судя по работе dbExec, данная функция лишь отправляет запрос на БД. После чего, данный запрос либо выполняется, либо ждет своей очереди на выполнение. Т.е. получается, огромное кол-во запросов помешается в стек и в подключении уже нет надобности, поэтому уничтожается. Пример, про что я спрашиваю: addEventHandler("onResourceStop", resourceRoot, function() for _, player in ipairs(getElementsByType("player")) do --dbExec(conneciton, ...) end destroyElement(conneciton) end ) Так как протестировать на огромном кол-ве игроков нет возможности, то спрашиваю, будет ли сбой? В теории, уничтожается лишь соединение, а запросы уже висят в стеке на обработку самой БД. Link to comment
Elengar Posted July 1, 2014 Share Posted July 1, 2014 Всё выполняется в одном потоке. Если подключение разрывается раньше чем обновляются игроки, то логично, что вместо сохранения информации в БД ты получишь кучу ошибок. Это понятно. Но судя по работе dbExec, данная функция лишь отправляет запрос на БД. После чего, данный запрос либо выполняется, либо ждет своей очереди на выполнение. Т.е. получается, огромное кол-во запросов помешается в стек и в подключении уже нет надобности, поэтому уничтожается. Пример, про что я спрашиваю: addEventHandler("onResourceStop", resourceRoot, function() for _, player in ipairs(getElementsByType("player")) do --dbExec(conneciton, ...) end destroyElement(conneciton) end ) Так как протестировать на огромном кол-ве игроков нет возможности, то спрашиваю, будет ли сбой? В теории, уничтожается лишь соединение, а запросы уже висят в стеке на обработку самой БД. А зачем тебе игроки ? Сделай цикл на 10000(ну или сколько там может быть) и записывай в БД что-нибудь рандомное. Link to comment
GTA-Multiplayer.com Posted July 6, 2014 Share Posted July 6, 2014 Действительно, сделай самостоятельно исследование этого вопроса. И о результатах напиши. Это же намного интересней Link to comment
CocaColaBear Posted July 6, 2014 Author Share Posted July 6, 2014 Действительно, сделай самостоятельно исследование этого вопроса. И о результатах напиши. Это же намного интересней Уже проверил. Все нормально обновляется. Все так, как я говорил, запросы отправляются в стек БД и оттуда выполняются, поэтому соединение можно легко прерывать и код выше будет работать. Link to comment
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